我有一个运行2.6.5的MongoDb生产集群,我最近从两个分片迁移到了三个分片.我已经作为两个碎片运行了大约一年.每个分片都是一个3服务器副本集,我有一个分片集合.
分片集合大约为240G,使用新分片,我现在在每个分片上均匀分布了2922个块.我的制作环境似乎表现得很好.访问数据没有问题.
[注意:1461应该是从rs0和shard1移动到shard2上的2922的块数.]
我的意图是再打三个集合,所以我从一个开始,并期望它分散在整个分片中.但不 - 我最终得到了这个重复的错误:
2014-10-29T20:26:35.374 + 0000 [Balancer] moveChunk结果:{cause:{ok:0.0,errmsg:"无法接受新的块,因为之前的迁移仍有1461个删除"},
ok:0.0,错误:"moveChunk未能在数据传输中使用TO-shard:无法接受新的块,因为以前的迁移仍有1461个删除"}
2014-10-29T20:26:35.375 + 0000 [Balancer]平衡器移动失败:{原因:{ok:0.0,错误:"无法接受新块,因为以前的迁移仍有1461个删除"},
ok:0.0,错误:"moveChunk未能在数据传输中使用TO-shard:无法接受新的块,因为从以前的迁移仍有1461个删除"}从:rs0到:shard1 chunk:min:{account_id:MinKey } max:{account_id:-9218254227106808901}
通过一些研究,我认为我应该给它一些时间,因为显然它需要在移动后清理一些东西.我运行了sh.disableBalancing("collection-name")来阻止错误尝试对新集合进行分片.sh.getBalancerState和sh.isBalancerRunning一样显示true.但是,我给了它24小时,错误信息是相同的.我认为它会清除/删除它需要删除的1461中的至少一个.
提前感谢任何见解.
Ada*_*ord 16
看到这种问题并不常见,但我看到它偶尔发生.
这里采取的最佳补救措施是降低引用的TO分片的主要部分,这将清除背景删除.删除线程仅存在于当前主节点上(它们将在处理时从主节点复制oplog).当您将其降低时,它将成为辅助,线程无法再写入,并且您将获得一个没有挂起删除的新主数据库.您可能希望在下台后重新启动前一个主要清除旧游标,但通常不紧急.
一旦你这样做,你将留下大量孤立的文件,这些文件可以是我建议在低流量时间运行的cleanUpOrphaned命令的地址(如果你有这样的时间).
作为参考,如果这是一个反复出现的问题,那么初选可能在负载方面有点挣扎,并且为了避免排队删除,您可以将平衡器的_waitForDelete选项设置为true(默认为false),如下所示:
use config
db.settings.update(
{ "_id" : "balancer" },
{ $set : { "_waitForDelete" : true } },
{ upsert : true }
)
Run Code Online (Sandbox Code Playgroud)
这意味着每次迁移都较慢(可能非常明显),但不会导致后台删除累积.
| 归档时间: |
|
| 查看次数: |
3634 次 |
| 最近记录: |