配置集群中均衡器的行为¶
均衡器是运行在集群中 一个 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 database 中 shards 上的 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 database 上 settings 集合中的 _secondaryThrottle 值,举例,连接到 mongos 之后,使用以下命令:
use config
db.settings.update(
{ "_id" : "balancer" },
{ $set : { "_secondaryThrottle" : false } },
{ upsert : true }
)
对 _secondaryThrottle 的修改可能不是立刻生效的,要想立刻生效,停止并重启均衡器,参见 管理集群均衡过程 获得更多信息.