MongoDB 分片集群。如何在节点之间分配磁盘存储?
MongoDB sharded cluster. How to distribute the disk storage between the nodes?
我们使用以下设置成功创建了一个工作的 MongoDB 集群:
- 2 个 MongOS 路由器
- 2x 复制配置节点(元数据)
- 6 个非复制分片节点(有意无副本)
所有单独的实例在 CPU、MEM、磁盘 space 等方面都是相同的
集群本身似乎运行良好。我们正在使用这些分片命令来分发分片:
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。您的数据库中是否有大量未分片的集合?
我们使用以下设置成功创建了一个工作的 MongoDB 集群:
- 2 个 MongOS 路由器
- 2x 复制配置节点(元数据)
- 6 个非复制分片节点(有意无副本)
所有单独的实例在 CPU、MEM、磁盘 space 等方面都是相同的
集群本身似乎运行良好。我们正在使用这些分片命令来分发分片:
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。您的数据库中是否有大量未分片的集合?