MongoDB SECONDARY 在夜间恢复

标签 mongodb time replication database-replication

我正在运行一个由 3 个成员(数据中心 A 中的成员 1、数据中心 B 中的成员 2 和成员 3)组成的传统 MongoDB 副本集。 member1 是当前的 PRIMARY,我通过 rs.add() 添加成员 2 和 3。他们正在执行初始同步,并很快成为 SECONDARY。一整天一切都很好,两个成员的复制延迟都是 0 秒,直到晚上 2 点。

现在:每天凌晨 2 点,两个成员都进入 RECOVERING 状态并完全停止复制,这导致我查看 rs.printSlaveReplicationInfo() 时复制延迟数小时在早上的时间。凌晨 2 点左右,我不知道有大量的插入或维护任务。

我在 PRIMARY 上获得以下日志条目:

2015-10-09T01:59:38.914+0200 [initandlisten] connection accepted from 192.168.227.209:59905 #11954 (37 connections now open)
2015-10-09T01:59:55.751+0200 [conn11111] warning: Collection dropped or state deleted during yield of CollectionScan
2015-10-09T01:59:55.869+0200 [conn11111] warning: Collection dropped or state deleted during yield of CollectionScan
2015-10-09T01:59:55.870+0200 [conn11111] getmore local.oplog.rs cursorid:1155433944036 ntoreturn:0 keyUpdates:0 numYields:1 locks(micros) r:32168 nreturned:0 reslen:20 134ms
2015-10-09T01:59:55.872+0200 [conn11111] end connection 192.168.227.209:58972 (36 connections now open)

而且,更有趣的是,我在两个 SECONDARY 上都得到了以下日志条目:

2015-10-09T01:59:55.873+0200 [rsBackgroundSync] repl: old cursor isDead, will initiate a new one
2015-10-09T01:59:55.873+0200 [rsBackgroundSync] replSet syncing to: member1:27017
2015-10-09T01:59:56.065+0200 [rsBackgroundSync] replSet error RS102 too stale to catch up, at least from member1:27017
2015-10-09T01:59:56.066+0200 [rsBackgroundSync] replSet our last optime : Oct  9 01:59:23 5617035b:17f
2015-10-09T01:59:56.066+0200 [rsBackgroundSync] replSet oldest at member1:27017 : Oct  9 01:59:23 5617035b:1af
2015-10-09T01:59:56.066+0200 [rsBackgroundSync] replSet See http://dochub.mongodb.org/core/resyncingaverystalereplicasetmember
2015-10-09T01:59:56.066+0200 [rsBackgroundSync] replSet error RS102 too stale to catch up
2015-10-09T01:59:56.066+0200 [rsBackgroundSync] replSet RECOVERING

这也是惊人的 - oplog 的开始在每天凌晨 2 点左右“重置”自己:

configured oplog size:   990MB
log length start to end: 19485secs (5.41hrs)
oplog first event time:  Fri Oct 09 2015 02:00:33 GMT+0200 (CEST)
oplog last event time:   Fri Oct 09 2015 07:25:18 GMT+0200 (CEST)
now:                     Fri Oct 09 2015 07:25:26 GMT+0200 (CEST)

我不确定这是否与问题相关。我还想知道这么小的延迟(Oct 9 01:59:23 5617035b:17f <-> Oct 9 01:59:23 5617035b:1af)让成员变得陈旧。

这也可能是服务器(VM 主机)时间问题还是完全不同的问题? (为什么第一个 oplog 事件每晚都被“重置”而不是“转移”到像现在减去 24 小时这样的时间戳?) 我可以做些什么来调查和避免?

最佳答案

增加 oplog 大小应该可以解决这个问题(根据我们的评论)。

为遇到此问题的其他人提供一些引用

关于MongoDB SECONDARY 在夜间恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33030651/

相关文章:

node.js - Nodejs表达如何将响应发送回浏览器

java.lang.UnsupportedOperationException : Unrecognized property type: org. hibernate.type.BagType

mongodb - Spring Data MongoDB 如何以编程方式分配过期时间

algorithm - 我如何找到时间复杂度 T(n) 并证明它是有界的(Big Theta)?

mysql - 为什么 mysql INSERT ... ON DUPLICATE KEY UPDATE 会破坏主/主配置上的 RBR 复制

Python - 创建 self 复制的类对象实例

mongodb - mongo atlas 或 aws - 内部或外部连接

c - NTP 客户端无限循环(不工作)

performance - 这段代码的时间复杂度

mysql - 复制从属锁定