我有一个带有2个分片,RS1和RS2的Mongo集群.RS1约为600G(*),RS2约为460G.几分钟前,我添加了一个新的碎片,RS3.当我连接到mongos并检查状态时,我看到的是:
mongos> db.printShardingStatus()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "RS1", "host" : "RS1/dbs1d1:27018" }
{ "_id" : "RS2", "host" : "RS2/dbs1d2:27018" }
{ "_id" : "RS3", "host" : "RS3/dbs3a:27018" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "demo", "partitioned" : false, "primary" : "RS1" }
{ "_id" : "cm_prod", "partitioned" : true, "primary" : "RS1" }
cm_prod.profile_daily_stats chunks:
RS2 16
RS1 16
too many chunks to print, use verbose if you want to force print
cm_prod.profile_raw_stats chunks:
RS2 157
RS1 157
too many chunks to print, use verbose if you want to force print
cm_prod.video_latest_stats chunks:
RS1 152
RS2 153
too many chunks to print, use verbose if you want to force print
cm_prod.video_raw_stats chunks:
RS1 3257
RS2 3257
too many chunks to print, use verbose if you want to force print
[ ...various unpartitioned DBs snipped...]
Run Code Online (Sandbox Code Playgroud)
因此,新的RS3分片出现在分片列表中,但不出现在"每个分片有多少块"的列表中.我希望它出现在该列表中,所有分片集合的计数为0.
如果我想要一点,这种预期的行为会自行解决吗?
它将开始有块移动到它,是的,事实上,在可预见的未来,它将成为每个块移动的默认目标(基本选择是从块最多的分片移动到块最少的分片)。每个主分片一次只能参与一次迁移,因此移动这么多块将需要一些时间,特别是当其他两个分片很忙时。
我见过人们关闭平衡器并忘记它的情况。鉴于你的其他 2 个碎片平衡得很好,我认为这里不是这种情况,但以防万一......
您可以通过连接到 mongos 然后执行以下操作来检查平衡器的状态:
use config;
db.settings.find( { _id : "balancer" } )
Run Code Online (Sandbox Code Playgroud)
确保“stopped”未设置为 true。
查看是什么持有锁,从而在当时保持平衡:
use config;
db.locks.find({ _id : "balancer" });
Run Code Online (Sandbox Code Playgroud)
最后,要检查平衡器实际在做什么,请查看该机器上的 mongos 日志。平衡器将行输出到前缀为 的日志中[Balancer]
。您还可以在日志中的主 mongod 实例的日志中查找迁移消息。
编辑:这可能是由SERVER-7003引起的- 2.2.0 发布后发现的一个错误。如果从源分片迁移的范围(块)中有删除,有时会导致这种瘫痪,所有块迁移都会中止,并且目标分片似乎总是在参与迁移,而实际上它是不是。
由于此问题已在 2.2.1 中修复,建议通过升级来解决该问题。尽管它可以通过重新启动和/或当目标分片上的不良状态自行解决时来解决,就像下面评论中的情况一样。
归档时间: |
|
查看次数: |
2673 次 |
最近记录: |