MongoDB正在排出碎片,但平衡器未运行?(removeShard占用太多时间)
我正在尝试将一个目前有8个碎片的分片集群缩小为一个有4个碎片的集群 我从第8个碎片开始,并尝试先移除它MongoDB正在排出碎片,但平衡器未运行?(removeShard占用太多时间),mongodb,sharding,Mongodb,Sharding,我正在尝试将一个目前有8个碎片的分片集群缩小为一个有4个碎片的集群 我从第8个碎片开始,并尝试先移除它 db.adminCommand( { removeShard : "rs8" } ); ---- { "msg" : "draining ongoing", "state" : "ongoing", "remaining" : { "chunks" : NumberLong(1575), "dbs" : NumberLong(0)
db.adminCommand( { removeShard : "rs8" } );
----
{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : NumberLong(1575),
"dbs" : NumberLong(0)
},
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [ ],
"ok" : 1
}
因此,有1575个块要迁移到集群的其余部分
但是运行sh.isBalancerRunning()
我得到值false
,并且sh.status()
的输出如下所示:
...
...
active mongoses:
"3.4.10" : 16
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
NaN
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
59 : Success
1 : Failed with error 'aborted', from rs8 to rs1
1 : Failed with error 'aborted', from rs2 to rs6
1 : Failed with error 'aborted', from rs8 to rs5
4929 : Failed with error 'aborted', from rs2 to rs7
1 : Failed with error 'aborted', from rs8 to rs2
506 : Failed with error 'aborted', from rs8 to rs7
1 : Failed with error 'aborted', from rs2 to rs3
...
因此,平衡器已启用,但未运行。但是有一个正在被移除的碎片(rs8)正在流失,所以我认为平衡器应该持续运行,对吗?但事实并非如此,正如我在上面提供的日志中所显示的那样
而且这个过程花费了难以置信的时间,在过去的将近一天里,剩余的块数只减少了10块,从1575块减少到1565块!这样,我需要几个月才能将8个实例的分片集群减少到4个实例的分片集群
MongoDB本身似乎也没有停止对正在流失的碎片的写入,所以我所经历的是,块的增加速度,可能几乎抵消了它们的减少
非常感谢您的帮助谢谢编辑 太好了,整整一个月后,这个过程结束了,我有一个4分片集群!做下面我描述的技巧有助于减少时间,但老实说,这是我做过的最慢的事情
好的,在这里回答我自己的问题 我无法让自动平衡行为以我想要的速度工作,每天我观察到大约5到7个块会被迁移(这意味着整个过程将需要几年!) 为了解决这个问题,我所做的是手动使用命令 所以我基本上做的是:
while 'can still sample':
// Sample the 8th shard for 100 documents
db.col.aggreagte([{$sample: {size: 100}}])
For every document:
db.moveChunk(namespace, {shardKey: value}, `rs${NUM}`);
因此,我手动将块从第8个碎片移动到前4个碎片(一个缺点是,我们需要启用平衡器,其中一些迁移的块将再次自动迁移到碎片5-7,我希望稍后也将其删除,这会导致该过程花费更多时间,有解决方案吗?)
由于第8块碎片正在流失,它将不再被平衡器填充,现在整个过程要快得多,大约每天350-400块。因此,希望每个碎片最多需要5天,然后整个调整大小将需要大约20天
这是我能做到的最快的速度,我感谢任何有其他答案或策略的人更好地执行此缩减。您是如何在正在排水的碎片上手动运行
moveChunk
命令的?我收到错误无法开始新的迁移,因为此碎片当前正在捐赠区块
——我认为这是指正在流失的区块,一次只能为一个碎片运行一个区块迁移。这是很久以前的事了,我真的不记得了。我的猜测是,他们要么改变了行为,要么根据我模糊的记忆,默认迁移过程非常古怪,大多数时候,没有发生块迁移,而碎片实际上正在流失,这是为了让它在迁移过程中有大约100%的块。也许他们也已经纠正了这种行为。理解这里的行为。禁用平衡器也停止了区块排放,我能够手动运行moveChunk
命令,这同样缓慢(~150区块/天)。将群集从版本4.4.2
升级到4.4.4
解决了这个问题,当前的排放速度现在是2500块/天。