0

在我的测试环境中: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无法及时复制?还是其他原因?我很困惑...在此先感谢

4

1 回答 1

0

如果 OpLog 的大小不足以记录主节点上发生的所有操作,或者辅助节点跟不上主节点,就会发生这种情况。在这种情况下会发生的是 OpLog 中辅助节点所在的位置将被来自主节点的新插入覆盖。此时,辅助节点将报告其状态为Recovering,您将RS102在日志中看到一条消息,表明它太陈旧而无法赶上。

要解决此问题,您需要按照文档中列出的步骤进行操作。

为了防止以后发生问题,您需要调整 OpLog 的大小,并确保辅助设备具有相同的硬件配置。

为了帮助调整 OpLog,您可以查看其输出,db.printReplicationInfo()它会告诉您在 OpLog 中有多少时间。该文档概述了如果 OpLog 太小,如何调整它的大小。

于 2012-09-07T02:40:55.670 回答