MultiThread插入mongodb制作陈旧数据

时间:2012-09-06 16:28:22

标签: mongodb

在我的测试Envinroment中: node1:shard1 primary,shard2 primary node2:shard1 secondary,shard2 secondary node3:shard1仲裁器,shard2 artbiter 我写了一个多线程同时写了mongo replicat set shard,1小时后(主要有6g数据) 我发现次要状态是:恢复 我检查了辅助日志,说:来自主oplog的陈旧数据 所以原因是我的写请求非常频繁?然后渲染辅助不能及时复制? 或其他原因? 我很困惑...... 提前致谢

1 个答案:

答案 0 :(得分:0)

如果OpLog的大小不足以记录主服务器上发生的所有操作,或者辅助服务器无法跟上主服务器,则会出现这种情况。在这种情况下会发生什么是OpLog中的位置,其中辅助将被主要的新插入覆盖。此时,辅助服务器将报告其状态为Recovering,您将在日志中看到RS102消息,表明它过于陈旧,无法赶上。

要解决此问题,您需要按照documentation

中列出的步骤进行操作

为了防止将来发生问题,您需要调整OpLog的大小,并确保辅助服务器具有相同的硬件配置。

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