【问题标题】:MongoDB sharded cluster. How to distribute the disk storage between the nodes?MongoDB 分片集群。如何在节点之间分配磁盘存储?
【发布时间】:2021-02-12 22:07:46
【问题描述】:

我们使用以下设置成功创建了一个正常工作的 MongoDB 集群:

  • 2x MongoOS 路由器
  • 2x 复制配置节点(元数据)
  • 6x 非复制分片节点(故意不复制)

所有单独的实例在 CPU、MEM、磁盘空间等方面都是相同的。

集群本身似乎工作得很好。我们使用这些分片命令来分配分片:

sh.shardCollection("blockchains.ethereum_balance",{"dapp_id":"hashed"})
sh.shardCollection("blockchains.ethereum_daily",{"to":"hashed"})

等等

但是,存储分布似乎不相等或至少效率不高:

问题:

  1. 如果我们添加一个新的分片,新节点是否会从“旧”节点获取一些信息? (“旧”分片正在移动部分数据)
  2. 这种情况下如何管理存储分布?

任何想法表示赞赏。

编辑:

似乎新创建的分片只是一些集合的一部分。自动迁移需要时间。

此外,索引仅保留每个分片。为了让 Mongo 将一些块移动到新创建的分片中,索引也应该在目标分片中。

【问题讨论】:

  • 阅读分片键、分片键选择和块平衡器。

标签: mongodb cluster-computing sharding


【解决方案1】:

在分片集群中,Sharded Cluster Balancer 负责均匀分布数据。默认情况下,您无需手动执行任何操作。

使用sh.status()db.ethereum_balance.getShardDistribution() / db.ethereum_daily.getShardDistribution()检查分片状态

也许你选择了一个糟糕的 Shard Key,请参阅Choosing a Shard Key。您的数据库中是否有大型未分片集合?

【讨论】:

  • 感谢您的回答。信息真的很有价值。似乎新创建的分片只是某些集合的一部分。此外,索引仅保留在每个分片中。
猜你喜欢
  • 2014-07-12
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2019-12-17
相关资源
最近更新 更多