MongoDB 中学在夜间恢复
MongoDB SECONDARY becoming RECOVERING at nighttime
我是运行一个常规的MongoDB副本集,由3个成员组成(数据中心A中的member1,数据中心B中的member2和member3)。
member1 是当前的 PRIMARY,我正在通过 rs.add()
添加成员 2 和 3。他们正在执行初始同步并很快成为 SECONDARY。一整天都很好,两个成员的复制延迟都是0秒,直到凌晨2点。
现在:每天凌晨 2 点,两个成员都进入恢复状态并完全停止复制,这导致我在早上查看 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 "resets" 本身在每晚凌晨 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 事件每晚都是 "resetted" 而不是像现在减去 24 小时这样的时间戳 "shifting"?)
我可以做些什么来调查和避免?
增加 oplog 大小应该可以解决这个问题(根据我们的评论)。
供 运行 关注此问题的其他人参考
- Workloads that Might Require a Larger Oplog Size
- 错误:replSet 错误 RS102 太陈旧无法跟上link1 & link2
我是运行一个常规的MongoDB副本集,由3个成员组成(数据中心A中的member1,数据中心B中的member2和member3)。
member1 是当前的 PRIMARY,我正在通过 rs.add()
添加成员 2 和 3。他们正在执行初始同步并很快成为 SECONDARY。一整天都很好,两个成员的复制延迟都是0秒,直到凌晨2点。
现在:每天凌晨 2 点,两个成员都进入恢复状态并完全停止复制,这导致我在早上查看 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 "resets" 本身在每晚凌晨 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 事件每晚都是 "resetted" 而不是像现在减去 24 小时这样的时间戳 "shifting"?) 我可以做些什么来调查和避免?
增加 oplog 大小应该可以解决这个问题(根据我们的评论)。
供 运行 关注此问题的其他人参考
- Workloads that Might Require a Larger Oplog Size
- 错误:replSet 错误 RS102 太陈旧无法跟上link1 & link2