执行大量插入时,MongoDB副本不同步

时间:2017-07-12 09:39:02

标签: mongodb apache-pig

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

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

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

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

有没有办法告诉MongoDB在复制上花费更多精力,并且在接受插入和复制之间有更平衡的工作量?

1 个答案:

答案 0 :(得分:2)

  

有没有办法告诉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('', '');