在 sharded cluster 体系结构中,Balancer 进程的作用是转移数据,当一个 shard 中
的数据比其它 shard 的数据多并达到一定条件时,Balancer 进程触发。
为了减少 Balancer 进程对性能的消耗,当拥有最多 Chunks 的 shard 节点和拥有最少
Chunks 的 shard 节点 chunks 差着达到阀值时才触发 Balancer 进程,如下。
--1 Migration Thresholds
Number of Chunks |
Migration Threshold |
Less than 20 | 2 |
21-80 | 4 |
Greater than 80 | 8 |
备注:当 Balancer 进程开始执行时,会一直执行下去,直到当拥有最多 Chunks 的 shard
节点和拥有最少 Chunks 的 shard 节点的差值小于上表阀值时结束。
--2 查看 Balancer 进程详细信息
[shard@redhatB ~]$ mongo 127.0.0.1:7282/config MongoDB shell version: 2.2.1 connecting to: 127.0.0.1:7282/config mongos> db.locks.find( { _id : "balancer" } ).pretty(); |
--3 查看 Balancer 进程是否开启
mongos> sh.getBalancerState(); true |
备注:连接到 config 库操作。
--4 停 Balancer 进程
mongos> sh.stopBalancer(); Waiting for active hosts... Waiting for the balancer lock... Waiting again for active hosts after balancer is off... mongos> sh.getBalancerState(); |
备注:连接到 config 库操作。
--5 开启 Balancer 进程
mongos> sh.startBalancer(); mongos> sh.getBalancerState(); true |
备注:连接到 config 库操作。
--6 设置 Balancer 进程运行时间窗口
默认情况下Balancing 进程时时在运行 为了降低 Balancing 进程对系统的影响,也可以设置
Balancer 进程的运行时间窗口,让 Balancer 进程在指定时间窗口操作。
mongos> db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "23:00", stop : "6:00" } } },true ) ;
mongos> db.settings.find(); |
备注:以上设置 balancer 进程在 23:00 到 6:00 时间窗口执行,如果要设置时间窗口,确保
在指定时间段内能够完成数据分布。
--7 删除 Balancer 进程运行时间窗口
mongos> db.settings.update({ "_id" : "balancer" }, { $unset : { activeWindow : 1 }});
mongos> db.settings.find(); |