在本页面
在版本3.4中进行了更改:平衡器进程已从mongos
实例移至配置服务器副本集的主要成员。
此页面描述了与平衡有关的常见管理过程。有关平衡的介绍,请参见分 片群集平衡器。有关平衡的下层信息,请参阅 Cluster Balancer。
sh.getBalancerState()
检查是否启用了平衡器(即允许平衡器运行)。sh.getBalancerState()
不检查平衡器是否正在主动平衡块。
要查看分片群集中是否启用了平衡器,请发出以下命令,该命令返回一个布尔值:
您还可以使用查看是否启用了平衡器sh.status()
。该currently-enabled
字段指示是否启用了平衡器,而该
currently-running
字段指示当前是否正在运行平衡器。
分片群集的默认块大小为64 MB。在大多数情况下,默认大小适用于拆分和迁移块。有关块大小如何影响部署的信息,请参见详细信息,请参阅块大小。
更改默认块大小会影响在迁移和自动拆分过程中正在处理的块,但不会追溯影响所有块。
要配置默认块大小,请参阅 在分片群集中修改块大小。
在某些情况下,尤其是当数据集增长缓慢并且迁移会影响性能时,确保平衡器仅在特定时间处于活动状态非常有用。以下过程指定activeWindow
,这是平衡器将能够迁移块的时间范围:
stopped
。¶平衡器不会在该stopped
状态下激活。为确保平衡器不是stopped
,请使用sh.startBalancer()
,如下所示:
如果您不在activeWindow
时间范围内,则平衡器将不会启动。
从MongoDB 4.2开始,sh.startBalancer()
还可以对分片群集进行自动拆分。
设置activeWindow
using update()
,如下所示:
使用两位数字的小时和分钟值(即)来替换<start-time>
和,<end-time>
以HH:MM
指定平衡窗口的开始和结束边界。
HH
值,请使用00
- 范围内的小时值23
。MM
值,请使用00
- 范围内的分钟值59
。MongoDB评估相对于配置服务器副本集中主要成员的成员所在时区的开始和停止时间。
注意
平衡器窗口必须足以完成一天中所有插入的数据的迁移。
由于数据插入率可以根据活动和使用模式而变化,因此重要的是要确保选择的平衡窗口足以满足您的部署需求。
设置时不要使用该sh.startBalancer()
方法
activeWindow
。
默认情况下,平衡器可以随时运行,并且仅根据需要移动块。要在短时间内禁用均衡器并防止所有迁移,请使用以下过程:
发出以下操作以禁用平衡器:
如果正在进行迁移,系统将在停止之前完成正在进行的迁移。
从MongoDB 4.2开始,sh.stopBalancer()
还会禁用分片群集的自动拆分。
要验证平衡器不会启动,请发出以下命令,false
如果禁用了平衡器,则返回该命令:
(可选)要验证禁用后是否没有正在进行的迁移,请在mongo
shell中发出以下操作:
注意
要从驱动程序禁用平衡器,请对数据库使用balancerStop命令admin
,如下所示:
如果您已禁用平衡器并准备重新启用它,请使用以下过程:
发出以下操作之一以启用平衡器:
从mongo
shell发出:
注意
要从驱动程序启用平衡器,请
对数据库使用balancerStart命令admin
,如下所示:
从MongoDB 4.2开始,sh.startBalancer()
还可以对分片群集进行自动拆分。
如果MongoDB 在备份过程中迁移了块,您可能会以分片群集的快照不一致而结束。平衡器处于活动状态时,切勿运行备份。为确保平衡器在备份操作期间处于非活动状态,请执行以下操作:
如果在平衡回合过程中关闭平衡器,则关闭不是立即进行的。平衡器完成正在进行的块移动,然后停止所有进一步的平衡回合。
在开始备份操作之前,请确认平衡器未处于活动状态。您可以使用以下命令来确定平衡器是否处于活动状态:
备份过程完成后,您可以重新激活平衡器过程。
您可以使用方法禁用特定集合的平衡
sh.disableBalancing()
。您可能想要禁用特定集合的平衡器,以支持维护操作或非典型工作负载,例如在数据提取或数据导出期间。
当您在集合上禁用平衡时,MongoDB不会中断正在进行的迁移。
要在集合上禁用平衡,请mongos
使用mongo
shell 连接到并调用该
sh.disableBalancing()
方法。
例如:
该sh.disableBalancing()
方法接受集合的完整名称空间作为其参数。
您可以使用sh.enableBalancing()
方法为特定集合启用平衡
。
当您为集合启用平衡时,MongoDB不会立即 开始平衡数据。但是,如果分片集合中的数据不平衡,MongoDB将能够开始更均匀地分配数据。
要在集合上启用平衡,请mongos
使用mongo
shell 连接到并调用该
sh.enableBalancing()
方法。
例如:
该sh.enableBalancing()
方法接受集合的完整名称空间作为其参数。
要确认是否启用了集合平衡,请collections
在config
数据库中查询集合的命名空间并检查该noBalance
字段。例如:
该操作将返回一个空的错误,true
,false
,或无输出:
true
,则禁用平衡。false
,则当前已启用平衡,但过去已对该集合禁用平衡。该集合的平衡将在下一次平衡器运行时开始。您还可以使用查看是否启用了平衡器sh.status()
。该currently-enabled
字段指示是否启用了平衡器。
在块迁移期间,该_secondaryThrottle
值确定何时对块中的下一个文档进行迁移。
在config.settings
集合中:
如果将_secondaryThrottle
平衡器的设置设置为写关注点,则在进行下一个文档之前,在块迁移期间移动的每个文档都必须收到请求的确认。
如果将_secondaryThrottle
平衡器的设置设置为
true
,则在迁移继续进行块中的下一个文档之前,在块迁移期间移动的每个文档都必须至少从一个辅助节点收到确认。这等效于的写关注。{ w: 2 }
如果未_secondaryThrottle
设置,迁移过程将不等待复制到辅助数据库,而是继续下一个文档。
从MongoDB 3.4开始的WiredTiger的默认行为。
要更改_secondaryThrottle
设置,请连接到
mongos
实例并直接更新
config数据库集合中的_secondaryThrottle
值。例如,从连接到的
外壳程序中,发出以下命令:settings
mongo
mongos
更改_secondaryThrottle
设置可能不会立即生效。为了确保立即生效,请停止并重新启动平衡器以启用选定的值_secondaryThrottle
。
有关在块迁移的各个步骤期间复制行为的更多信息,请参见块迁移和复制。
对于moveChunk
命令,可以使用命令的
_secondaryThrottle
和writeConcern
选项指定命令执行期间的行为。有关详细信息,请参见moveChunk
命令。
默认情况下,分片对存储大小没有限制。但是,您可以为分片群集中的给定分片设置最大存储大小。选择潜在的目标分片时,平衡器将忽略迁移超过配置的最大存储大小的分片。
config数据库中的shards
集合存储与分片有关的配置数据。
要限制给定分片的存储大小,请将该db.collection.updateOne()
方法与$set
运算符一起使用
以创建maxSize
字段并为其分配integer
值。该
maxSize
字段表示中的分片的最大存储大小
megabytes
。
以下操作在一个分片上设置最大大小:1024 megabytes
该值包括分片上所有数据文件(包括local
和admin
数据库)的映射大小。
默认情况下,maxSize
未指定,允许分片在必要时消耗其计算机上的可用空间总量。
您还可以maxSize
在添加分片时进行设置。
要maxSize
在添加分片时进行设置,请在中将addShard
命令的maxSize
参数设置为最大大小megabytes
。在mongo
Shell中运行的以下命令将添加最大大小为125 MB的碎片: