我有一个包含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...]
因此,新的RS3分片出现在分片列表中,但不出现在“每个分片有多少块”的列表中。我希望它出现在该列表中,所有分片集合的计数为0。
如果我想要一点,这种预期的行为会自行解决吗?
答案 0 :(得分:3)
它将开始将块移到它上面,是的,实际上它将是可预见的未来每个块移动的默认目标(基本选择是从具有最多的碎片移动到具有最少块的碎片)。每个shard primary一次只能参与一次迁移,所以要移动它需要一些时间,特别是如果其他两个忙碌的话。
我见过人们关闭平衡器并忘记它的情况。鉴于你的其他2个分片很平衡,我不认为这是这种情况,但以防万一....
您可以通过连接到mongos然后执行以下操作来检查平衡器的状态:
use config;
db.settings.find( { _id : "balancer" } )
确保“已停止”未设置为true。
要查看持有锁的内容,并因此在那时保持平衡:
use config;
db.locks.find({ _id : "balancer" });
最后,要查看平衡器实际执行的操作,请查看该计算机上的mongos日志。平衡器将行输出到以[Balancer]
为前缀的日志。您还可以在日志中的主要mongod实例的日志中查找迁移消息。
由于已在2.2.1中修复此问题,因此升级是解决此问题的建议路径。虽然可以通过重新启动和/或目标分片上的错误状态自行解决,但在下面的注释中似乎就是这种情况。
答案 1 :(得分:1)
改为使用db.printShardingStatus(true);
它将打印碎片,块和所有其他细节列表