【问题标题】:MultiThread insert mongodb made stale data多线程插入 mongodb 使数据过时
【发布时间】:2012-09-07 10:40:55
【问题描述】:

在我的测试环境中: node1:shard1 主,shard2 主 节点 2:shard1 辅助,shard2 辅助 节点 3:shard1 仲裁器,shard2 仲裁器 我写了一个多线程并发写mongo副本集分片,1小时后(主有6g数据) 我发现次要状态是:正在恢复 我检查了辅助日志,说:来自主oplog的陈旧数据 那么原因是我的写请求非常频繁?然后渲染辅助无法及时复制? 还是其他原因? 我很纳闷... 提前致谢

【问题讨论】:

    标签: mongodb


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-25
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多