Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

分析分片数据分布

在此页面上

  • 关于此任务
  • 开始之前
  • 步骤
  • 了解详情

使用此过程分析 分片的数据分布。您可以使用此信息来确定集群上是否会有大量的负载均衡。

此过程向您展示如何:

在整个升级进程中保持负载均衡器关闭。 了解新负载均衡策略下集合的均匀性后,可以重新打开负载均衡器。

1

要将集群从5.0 升级到6.0 ,请参阅将分片集群升级到 6.0。

2

你可以连接到集群中的任何 mongos

3

要了解集合的数据分布将如何影响均衡,请使用$shardedDataDistribution 聚合阶段。

要返回所有分片数据分布指标,请运行以下命令:

db.aggregate([
{ $shardedDataDistribution: { } }
])

示例输出:

[
{
"ns": "test.names",
"shards": [
{
"shardName": "shard-1",
"numOrphanedDocs": 0,
"numOwnedDocuments": 6,
"ownedSizeBytes": 366,
"orphanedSizeBytes": 0
},
{
"shardName": "shard-2",
"numOrphanedDocs": 0,
"numOwnedDocuments": 6,
"ownedSizeBytes": 366,
"orphanedSizeBytes": 0
}
]
}
]

如果 最大的分片与ownedSizeBytes ownedSizeBytes最小的分片之间的差值在迁移阈值之内,则认为集合是均衡的。为这些集合启用负载均衡器后,它不会发出迁移。

4

如果您的集合不均衡,并且您希望控制负载均衡器行为,则可以使用以下一种或两种方法:

  • 通过 修改负载均衡窗口,将负载均衡器配置为仅在特定时间处于活动状态。

  • 通过禁用集合上的负载均衡器,将负载均衡操作限制为特定集合。

修改负载均衡窗口

  1. 切换到配置数据库。

    发出以下命令以切换到 config数据库。

    use config
  2. 设置负载均衡窗口的开始和结束时间。

    要设立活动窗口,请使用updateOne() 方法:

    db.settings.updateOne(
    { _id: "balancer" },
    { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
    { upsert: true }
    )

    <start-time><end-time> 替换为使用两位数小时和分钟值的时间值(即 HH:MM),指定负载均衡窗口的开始和结束边界。

    • 对于 HH 值,请使用介于 00 - 23 之间的小时值。

    • 对于 MM 值,请使用从 0059(含)的分钟值。

    对于自管理分片的集群, MongoDB会计算相对于配置服务器副本集集中主节点 (primary node in the replica set)节点时区域的开始时间和停止时间。

    对于 Atlas 集群,MongoDB 会评估相对于 UTC 时区的开始和停止时间。

    注意

    负载均衡器窗口必须足以完成当天所插入全部数据的迁移。

    由于数据插入速率可能会根据活动和使用模式而变化,因此请确保您选择的负载均衡窗口足以支持您的部署需求。

  3. (可选)确保范围删除是同步进行的。

    仅当要将范围删除限制在负载均衡窗口内时才使用此步骤。

    默认情况下,负载均衡器不会等待进行中迁移的删除阶段完成就开始下一个数据块迁移。 要让删除阶段区块下一个数据块迁移开始,可以将_waitForDelete 设立为 true。

    更新 config数据库的 settings集合中的 _waitForDelete 值。 示例:

    use config
    db.settings.updateOne(
    { "_id" : "balancer" },
    { $set : { "_waitForDelete" : true } },
    { upsert : true }
    )

禁用特定集合的负载均衡

默认下,每个集合都启用了负载均衡。

要为特定集合禁用负载均衡,请使用mongos mongoshShell连接到 并调用sh.disableBalancing() 方法。

此示例对 students.grades集合禁用负载均衡:

sh.disableBalancing("students.grades")

sh.disableBalancing()方法接受集合的完整命名空间作为其参数。

5

如果已禁用负载均衡器并准备重新启用它,请执行以下过程:

  1. 使用mongos shell 连接到集群中的任意 mongosh

  2. 发出以下操作之一以启用负载均衡器:

    mongosh Shell中,运行:

    sh.startBalancer()

    注意

    要从驱动程序启用负载均衡器,请对 admin 数据库使用 balancerStart 命令,如下所示:

    db.adminCommand( { balancerStart: 1 } )

    从 MongoDB 6.0.3 开始,不再执行自动数据块分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。有关详细信息,请参阅均衡策略变更

    在 6.0.3 之前的 MongoDB 版本中,sh.startBalancer() 还支持分片集群的自动拆分。

后退

删除哈希分片键索引