具有延迟副本的MongoDB平衡器超时

具有延迟副本的MongoDB平衡器超时,mongodb,database-replication,Mongodb,Database Replication,我们有两个mongodb碎片的设置。每个碎片包含一个主、一个从、一个24小时从延迟从和一个仲裁器。 但是,平衡器无法迁移任何等待延迟的从机迁移的碎片。 我已尝试在平衡器配置中将_secondaryThrottle设置为false,但仍然存在问题 迁移似乎持续了一天,然后失败了(在日志中等待大量从属消息)。最终,它放弃了,开始了新的迁移。消息显示正在等待3个从机,但延迟从机已隐藏且优先级为0,因此它应该等待该从机。如果第二个节流阀工作,它就不应该等待任何从机,对吗 这样已经有几个月了,所以应该在所

我们有两个mongodb碎片的设置。每个碎片包含一个主、一个从、一个24小时从延迟从和一个仲裁器。 但是,平衡器无法迁移任何等待延迟的从机迁移的碎片。 我已尝试在平衡器配置中将_secondaryThrottle设置为false,但仍然存在问题

迁移似乎持续了一天,然后失败了(在日志中等待大量从属消息)。最终,它放弃了,开始了新的迁移。消息显示正在等待3个从机,但延迟从机已隐藏且优先级为0,因此它应该等待该从机。如果第二个节流阀工作,它就不应该等待任何从机,对吗

这样已经有几个月了,所以应该在所有Mongos上重新加载配置。一些运行平衡器的Mongos最近已经重启

有人知道如何解决这个问题吗?在启动延迟的奴隶之前,我们没有这些问题,但这只是我们的理论

配置:

{ "_id" : "balancer", "_secondaryThrottle" : false, "stopped" : false }
来自shard1主进程的日志:

[migrateThread]警告:迁移提交正在等待3个从属服务器 'xxx.xxx'{shardkey:ObjectId('4fd2025ae087c37d32039a9e')}-> {shardkey:ObjectId('4fd2035ae087c37f044014a79')}正在等待: 529dc9d9:7a[migrateThread]正在等待复制赶上之前 进入临界段

来自shard2主进程的日志:

12月3日星期二14:52:25.302[conn1369472]移动块数据传输 进度:{active:true,ns:“xxx.xxx”,发件人: “shard2/mongo2:27018,mongob2:27018”,min:{shardkey: ObjectId('4fd2025ae087c37d32039a9e'),最大值:{shardkey: ObjectId('4fd2035ae087c37f04014a79'),shardKeyPattern:{shardkey: 1.0},状态:“catchup”,计数:{克隆:22773,克隆字节:36323458,catchup:0,稳定:0},确定:1.0}我的内存使用:0

更新: 我确认移除slaveDelay使平衡器重新工作。他们一加快速度块就开始移动。因此,这个问题似乎与奴隶时代有关。我还确认平衡器使用“secondaryThrottle”运行:false。不管怎样,它似乎在等待奴隶

碎片2:

12月10日星期二11:44:25.423[migrateThread]警告:迁移提交等待'xxx.xxx'{shardkey:ObjectId('4ff1213ee087c3516b2f703f')}->{shardkey:ObjectId('4FF12A5EDDF2B32DF1E7BEA')的3个从机等待:52a6f089:81

12月10日星期二11:44:26.423[migrateThread]在进入关键部分之前等待复制赶上

12月10日星期二11:44:27.423[migrateThread]在进入关键部分之前等待复制赶上

12月10日星期二11:44:28.423[migrateThread]在进入关键部分之前等待复制赶上

12月10日星期二11:44:29.424[migrateThread]在进入关键部分之前等待复制赶上

12月10日星期二11:44:30.424[migrateThread]在进入关键部分之前等待复制赶上

12月10日星期二11:44:31.424[migrateThread]在进入关键部分之前等待复制赶上

12月10日星期二11:44:31.424[migrateThread]迁移提交成功刷新到“xxx.xxx”{shardkey:ObjectId('4ff1213ee087c3516b2f703f')}->{shardkey:ObjectId('4FF12A5EDDF2B32DF1E7BEA')的二级缓存

12月10日星期二11:44:31.425[migrateThread]为“xxx.xxx”{shardkey:ObjectId('4ff1213ee087c3516b2f703f')}->{shardkey:ObjectId('4FF12A5EDDF2B32DF1E7BEA')迁移提交刷新到日志

12月10日星期二11:44:31.647[migrateThread]迁移提交成功刷新到“xxx.xxx”{shardkey:ObjectId('4ff1213ee087c3516b2f703f')}->{shardkey:ObjectId('4FF12A5EDDF2B32DF1E7BEA')的二级缓存

12月10日星期二11:44:31.667[migrateThread]为“xxx.xxx”{shardkey:ObjectId('4ff1213ee087c3516b2f703f')}->{shardkey:ObjectId('4FF12A5EDDF2B32DF1E7BEA')迁移提交刷新到日志


你正在运行哪个版本?2.4.2及以下版本以及2.2.4及以下版本中存在一个已知错误,该错误导致集合中的二级缓存数量计数不正确(因此无法满足迁移的默认写入)。这就是bug(在2.4.3+和2.2.5+中修复):


关闭辅助节流阀应该是一种有效的解决方法,但您可能希望在任何
mongos
进程上执行一次操作(或者只需重新启动所有
mongos
进程),以确保该设置对您的迁移生效,特别是在迁移需要一天时间的情况下。作为升级之前的另一个潜在修复,您也可以(将重新创建)。

在开始删除源碎片上的文档之前,平衡器正在正确地等待目标碎片的大部分副本集迁移文档

问题是复制集中有四个成员(主、从、24小时从延迟从和仲裁)。这意味着三人占多数。我不知道为什么要添加仲裁器,但如果删除它,则两个将占多数,平衡器将不必等待延迟的从属


实现相同结果的另一种方法是使用
投票:0
属性设置延迟从属,并将仲裁器作为第三个投票节点。

我们正在运行2.4.6。我已经完成了flushRouterConfig,但是我不知道如何验证mongos进程是否具有新的配置。我会详细了解当地的奴隶。谢谢你的回答我确认local.slaves收藏已经过时了,我现在重建了它,并看到了它的帮助。删除local.slaves没有帮助。我确认移除slaveDelay使平衡器重新工作。他们一加快速度块就开始移动。因此,这个问题似乎与奴隶时代有关。我还确认了平衡器使用“secondaryThrottle”运行:false。我刚刚重新阅读了您的配置列表-您说您有一个主、从、延迟从和一个仲裁器。Tha