OPTIONS
翻译或纠错本页面

配置集群中均衡器的行为

均衡器是运行在集群中 一个 mongos 上的确保 数据块 均匀分布在每个分片上的任务.在大多数情况下,默认的配置已经可以工作得很好.不过,有时候,按照应用与操作的不同,管理员可以修改均衡器的工作.如果你确定要修改均衡器的行为,使用这篇文档的教程:

参见 开启分片集合的均衡集群均衡器 获得对均衡过程概念上的了解.

为均衡过程的发生设定时间窗口

按照以下的流程,你可以为均衡过程的发生设定时间窗口:

每个 mongos 都使用他们的本地时间来解释时间窗口.

配置默认的数据块大小

默认的数据块大小是64MB,在大多数情况下,默认的数据块大小对于数据块分裂与迁移是合适的.参见 数据块大小 获得数据块大小是如何影响部署的细节.

更改默认的数据块大小会影响自动分裂与数据块的迁移,但是不会对以往的所有数据块都造成影响.

参见 修改集群中数据块的大小 获得如何修改默认的数据块大小.

改变一个指定分片所使用的最大存储空间

config database 中的 shards 集合存储的 maxSize 限制了这个分片可以使用的最大磁盘空间.如果 mapped [1] 大小超过了设定的这个值,均衡器将不会再向这个分片迁移数据.Also,the balancer will not move chunks off an overloaded shard. This must happen manually. The maxSize value only affects the balancer’s selection of destination shards.

默认情况下,``maxSize`` 没有被设置,如果有必要,分片可以使用磁盘的所有空间.

可以在添加分片时设置 maxSize ,也可以在分片运行时添加.

在添加分片时设置 maxSize ,需要为 addShard 设置 maxSize 参数,单位为MB,以下的命令添加了一个分片,并设置 maxSize 为125MB:

db.runCommand( { addshard : "example.net:34008", maxSize : 125 } )

为以存在的分片设置 maxSize,需要插入或者更新存储在 config databaseshards 上的 maxSize 记录,以 MB 为单位.

示例

假设有以下的分片,没有设置过 maxSize 子段:

{ "_id" : "shard0000", "host" : "example.net:34001" }

运行以下命令,为此分片插入 125MB 的 maxSize .

use config
db.shards.update( { _id : "shard0000" }, { $set : { maxSize : 125 } } )

以后如果想要更新 maxSize 为250MB,使用以下命令:

use config
db.shards.update( { _id : "shard0000" }, { $set : { maxSize : 250 } } )
[1]

这个值包含了 local 数据库与 admin 数据库,在设定时应该注意到这点.

改变数据块迁移时的复制集行为(Secondary Throttle)

均衡器与 moveChunk 命令的 _secondaryThrottle 参数影响了在进行 数据块迁移 时复制集的行为.默认情况下, _secondaryThrottle 被设定为 true ,这意味着在迁移过程进行到下一个阶段之前,每条被迁移的记录都被同步到了至少一个从节点上.参见 数据块迁移与复制集 获得更多在均衡阶段复制集行为的信息.

要更改均衡器的 _secondaryThrottle ,连接到一个 mongos 上,直接修改存储在 config databasesettings 集合中的 _secondaryThrottle 值,举例,连接到 mongos 之后,使用以下命令:

use config
db.settings.update(
   { "_id" : "balancer" },
   { $set : { "_secondaryThrottle" : false } },
   { upsert : true }
)

_secondaryThrottle 的修改可能不是立刻生效的,要想立刻生效,停止并重启均衡器,参见 管理集群均衡过程 获得更多信息.