我正在尝试将当前具有 8 个分片的分片集群缩小到具有 4 个分片的集群。
我从第 8 个分片开始,并尝试先将其删除。
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
}
Run Code Online (Sandbox Code Playgroud)
所以有 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
...
Run Code Online (Sandbox Code Playgroud)
所以平衡器已启用,但未运行。但是有一个正在被删除的耗尽碎片 (rs8),所以我认为平衡器应该不断运行,对吗?但事实并非如此,如我上面提供的日志所示。
而且这个过程花费的时间非常长,在过去的近一天里,剩余块的数量仅减少了 10 个块,从1575到1565!这样,我将需要几个月的时间才能将 8 个实例的分片集群减少到 4 个实例的分片集群!
似乎 MongoDB 本身也不会停止写入耗尽的分片,所以我所经历的是块增加的速度,也许几乎抵消了它们的减少?
任何帮助是极大的赞赏!
谢谢
编辑
太棒了,现在正好一个月后,这个过程就结束了,我有了一个 4 分片集群!执行我下面描述的技巧有助于减少无论如何可能花费的时间,但老实说,这是我做过的最慢的事情。
好吧,所以在这里回答我自己的,
我无法让自动平衡行为按照我想要的速度工作,每天我观察到大约 5 到 7 个块会被迁移(这意味着整个过程将需要数年时间!)
为了解决这个问题,我所做的就是手动使用moveChunk命令。
所以我基本上做的是:
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}`);
Run Code Online (Sandbox Code Playgroud)
因此,我手动将块从第 8 个分片移至前 4 个分片(一个缺点是,因为我们需要启用平衡器,并且每时每刻只有一个分片可以耗尽,其中一些已迁移的块将再次自动迁移到碎片 5-7,我稍后也想删除它,这会导致该过程花费更多时间,有什么解决方案吗?)。
由于第 8 个分片正在耗尽,它不会再次被平衡器填充,现在整个过程要快得多,每天大约 350-400 个块。因此,希望每个分片最多需要大约 5 天,然后整个调整大小大约需要 20 天!
这是我能做到的最快速度,我感谢任何有其他答案或策略来更好地执行此缩减操作的人。
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |