【问题标题】:MongoDB replica out of sync when performing a lot of inserts执行大量插入时,MongoDB 副本不同步
【发布时间】:2017-07-13 21:40:15
【问题描述】:

我有一个使用 MongoDB v3.2.4 的三成员副本集。每个成员都是一个具有 8 个内核和 8GB RAM 的 VM,在正常操作中,这些节点的 CPU 和内存消耗非常低。

我有一个 60GB 的数据库(3000 万个文档),每月一次完全由用 Pig 编写的 Map/Reduce 作业重新加载。在此作业期间,集群接收 30k 插入/秒,并且在几分钟内辅助节点变得不同步。

当前 oplog 大小为 20GB(已从默认值修改)但这并不能解决复制同步问题。

我不知道再次修改 oplog 大小是否会有所帮助。我担心的是,复制似乎是在主节点上没有负载时完成的。由于我的插入作业持续 1 小时,这是否意味着我需要一个与我的数据库大小相同的 oplog?

有没有办法告诉 MongoDB 在复制上投入更多精力,并在接受插入和复制之间实现更平衡的工作负载?

【问题讨论】:

  • MongoDB 不会实时复制,但更多的是最终一致。如果主节点负载很大,则此延迟可能会延长。等待一段时间,看看辅助节点是否一致。

标签: mongodb apache-pig


【解决方案1】:

有没有办法告诉 mongo 在复制上投入更多精力,以便在接受插入和复制这些插入之间有更平衡的工作负载?

为确保数据已复制到辅助节点(并限制插入),您应该将 write concern 增加到 w:majority。默认的写入问题 (w:1) 仅确认主节点已接受写入操作,因此如果您的辅助节点无法跟上较长时间的插入,它们最终将不同步(正如您所经历的那样)。

您可以在MongoDB Connection String URI 中包含大多数选项,例如:

STORE data INTO     
  'mongodb://user:pass@db1.example.net,db2.example.net/my_db.my_collection?replicaSet=replicaSetName&w=majority'
USING com.mongodb.hadoop.pig.MongoInsertStorage('', '');

【讨论】:

  • 非常感谢,在大多数节点上强制复制应该可以通过跳过复制功能来解决问题。由于延迟工作对我们来说不是问题,因此添加它应该是可以接受的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多