问题描述
我们通过以下设置成功创建了可正常使用的MongoDB集群:
- 2个MongOS路由器
- 2个复制的配置节点(元数据)
- 6个非复制分片节点(有意无复制)
所有单独的实例在cpu,MEM,磁盘空间等方面都是相同的。
集群本身似乎运行良好。我们正在使用以下分片命令来分发分片:
sh.shardCollection("blockchains.ethereum_balance",{"dapp_id":"hashed"})
sh.shardCollection("blockchains.ethereum_daily",{"to":"hashed"})
等
但是,存储分布似乎不相等或至少没有效率:
问题:
任何想法表示赞赏。
编辑:
似乎新创建的碎片仅占某些集合的一部分。自动迁移需要时间。
此外,索引仅保留一个分片。为了将Mongo的一些块移动到新创建的碎片索引中,索引也应位于目标碎片中。
解决方法
在分片群集中,您拥有Sharded Cluster Balancer,它可以确保均匀分布数据。默认情况下,您无需手动执行任何操作。
使用sh.status()
和db.ethereum_balance.getShardDistribution() / db.ethereum_daily.getShardDistribution()
检查分片状态
也许您选择了较差的分片键,请参见Choosing a Shard Key。您的数据库中有大量未分片的集合吗?