Mongodb 碎片在集群中并不均衡
我有两块碎片。 一个在独立服务器上,另一个在复制集上:Mongodb 碎片在集群中并不均衡,mongodb,sharding,Mongodb,Sharding,我有两块碎片。 一个在独立服务器上,另一个在复制集上: mongos> db.runCommand({listshards:1}) { "shards" : [ { "_id" : "shard0000", "host" : "mongo3:10001" }, { "_id" : "set1",
mongos> db.runCommand({listshards:1})
{
"shards" : [
{
"_id" : "shard0000",
"host" : "mongo3:10001"
},
{
"_id" : "set1",
"host" : "set1/mongo1:10001,mongo2:10001"
}
],
"ok" : 1
}
我插入了大约3000万张唱片
据我所知,mongo应该平衡碎片之间的数据,但事实并非如此:
mongos> db.stats()
{
"raw" : {
"set1/mongo1:10001,mongo2:10001" : {
"db" : "my_ginger",
"collections" : 3,
"objects" : 5308714,
"avgObjSize" : 811.9953284354742,
"dataSize" : 4310650968,
"storageSize" : 4707774464,
"numExtents" : 23,
"indexes" : 2,
"indexSize" : 421252048,
"fileSize" : 10666115072,
"nsSizeMB" : 16,
"ok" : 1
},
"mongo3:10001" : {
"db" : "my_ginger",
"collections" : 6,
"objects" : 25162626,
"avgObjSize" : 1081.6777010475776,
"dataSize" : 27217851444,
"storageSize" : 28086624096,
"numExtents" : 38,
"indexes" : 6,
"indexSize" : 1903266512,
"fileSize" : 34276900864,
"nsSizeMB" : 16,
"ok" : 1
}
},
"objects" : 30471340,
"avgObjSize" : 1034.6936633571088,
"dataSize" : 31528502412,
"storageSize" : 32794398560,
"numExtents" : 61,
"indexes" : 8,
"indexSize" : 2324518560,
"fileSize" : 44943015936,
"ok" : 1
}
我做错了什么
谢谢。根据注释中的
sh.status()
输出,shard0000(单个主机)上有164个块,set1(副本集)上有85个块。出现这种不平衡的原因有两个:
同样,如果您想查看其性能,您将在每个分片的主日志中看到与迁移相关的消息,以及迁移所需的时间等。似乎有3个未分片的集合。你在其中插入了很多文档吗?mongos的
sh.status()
的输出是什么?我有3个未归档的集合,但它们几乎是空的(40条记录)mongos>sh.status()---分片状态---分片版本:{“\u id”:1,“version”:3}分片:{“\u id”:“set1”,“host”:“set1/mongo1:10001,mongo2:10001”}{u-id:“shard0000”,“host:“mongo3:10001”}数据库:{u-id:“admin”,“partitioned”:false,“primary”:“config”}{u-id:“my\u-db”,“partitioned”:true,“primary”:“shard0000”}my_db.query_数据块:shard000164 set1 85要打印的块太多,如果要强制打印,请使用verbose,这样所有内容都将进入shard0000。您是如何创建以下shard-`{“\u id”:“set1”,“host”:“set1/mongo1:10001,mongo2:10001”}`您好。碎片键是随机生成的GUID。我刚刚运行了一个脚本,它创建了数百万个具有相同结构但不同GUID的条目。当您说“某个时间”时,它大约是什么时间?秒、小时、天、周?“某个时间”是各种因素的组合:内存中有多少数据(必须读入才能迁移),对于不在内存中的部分,可以以多快的速度从磁盘分页,集群上的负载(在源上读取和在目标上写入),每个区块有多少文档(每个文档基本上都插入到目标上),这些文档的大小,以及机器之间的网络速度(通常不是问题)。因此,一般情况下无法进行估计-在群集不太忙的情况下,估计速度也会更快。
use config
db.changelog.find().sort({$natural:-1}).limit(10).pretty()