在我的测试环境中:node1:shard1 primary,shard2 primary node2:shard1 secondary,shard2 secondary node3:shard1 arbiter,shard2 artbiter 我写了一个多线程并发写入mongo副本集shard,1小时后(主有6g数据) 我发现secondary的状态是:recovering 我检查了secondary log,说:stale data from primary oplog 所以是我的写请求非常频繁?然后导致secondary无法及时复制?还是其他原因?我很困惑...在此先感谢
问问题
167 次
1 回答
0
如果 OpLog 的大小不足以记录主节点上发生的所有操作,或者辅助节点跟不上主节点,就会发生这种情况。在这种情况下会发生的是 OpLog 中辅助节点所在的位置将被来自主节点的新插入覆盖。此时,辅助节点将报告其状态为Recovering
,您将RS102
在日志中看到一条消息,表明它太陈旧而无法赶上。
要解决此问题,您需要按照文档中列出的步骤进行操作。
为了防止以后发生问题,您需要调整 OpLog 的大小,并确保辅助设备具有相同的硬件配置。
为了帮助调整 OpLog,您可以查看其输出,db.printReplicationInfo()
它会告诉您在 OpLog 中有多少时间。该文档概述了如果 OpLog 太小,如何调整它的大小。
于 2012-09-07T02:40:55.670 回答