分析分片数据分布
使用此过程分析 分片的数据分布。您可以使用此信息来确定集群上是否会有大量的负载均衡。
关于此任务
此过程向您展示如何:
将集群从 5.0 升级到 6.0。
$shardedDataDistribution
使用 阶段确定分片的数据在集群中的分布。如果需要,请更新负载均衡器设置。
开始之前
在整个升级进程中保持负载均衡器关闭。 了解新负载均衡策略下集合的均匀性后,可以重新打开负载均衡器。
步骤
将集群从 5.0 升级到 6.0。
要将集群从5.0 升级到6.0 ,请参阅将分片集群升级到 6.0。
使用mongosh连接到mongos 。
你可以连接到集群中的任何 mongos
。
分析集群上的数据分布。
要了解集合的数据分布将如何影响均衡,请使用$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
最小的分片之间的差值在迁移阈值之内,则认为集合是均衡的。为这些集合启用负载均衡器后,它不会发出迁移。
(可选)在 6.0上配置负载负载均衡器。
如果您的集合不均衡,并且您希望控制负载均衡器行为,则可以使用以下一种或两种方法:
修改负载均衡窗口
切换到配置数据库。
发出以下命令以切换到
config
数据库。use config 设置负载均衡窗口的开始和结束时间。
要设立活动窗口,请使用
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
值,请使用从00
到59
(含)的分钟值。
对于自管理分片的集群, MongoDB会计算相对于配置服务器副本集集中主节点 (primary node in the replica set)节点时区域的开始时间和停止时间。
对于 Atlas 集群,MongoDB 会评估相对于 UTC 时区的开始和停止时间。
注意
负载均衡器窗口必须足以完成当天所插入全部数据的迁移。
由于数据插入速率可能会根据活动和使用模式而变化,因此请确保您选择的负载均衡窗口足以支持您的部署需求。
(可选)确保范围删除是同步进行的。
仅当要将范围删除限制在负载均衡窗口内时才使用此步骤。
默认情况下,负载均衡器不会等待进行中迁移的删除阶段完成就开始下一个数据块迁移。 要让删除阶段区块下一个数据块迁移开始,可以将
_waitForDelete
设立为 true。更新
config
数据库的settings
集合中的_waitForDelete
值。 示例:use config db.settings.updateOne( { "_id" : "balancer" }, { $set : { "_waitForDelete" : true } }, { upsert : true } )
禁用特定集合的负载均衡
默认下,每个集合都启用了负载均衡。
要为特定集合禁用负载均衡,请使用mongos
mongosh
Shell连接到 并调用sh.disableBalancing()
方法。
此示例对 students.grades
集合禁用负载均衡:
sh.disableBalancing("students.grades")
重新启用集群上的负载均衡器。
如果已禁用负载均衡器并准备重新启用它,请执行以下过程:
发出以下操作之一以启用负载均衡器:
在
mongosh
Shell中,运行:sh.startBalancer() 注意
要从驱动程序启用负载均衡器,请对
admin
数据库使用 balancerStart 命令,如下所示:db.adminCommand( { balancerStart: 1 } ) 从 MongoDB 6.0.3 开始,不再执行自动数据块分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。有关详细信息,请参阅均衡策略变更。
在 6.0.3 之前的 MongoDB 版本中,
sh.startBalancer()
还支持分片集群的自动拆分。