在 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 进程信息
1 |
[shard@redhatB ~]$ mongo 127.0.0.1:7282/config |
3 查看 Balancer 进程是否开启
1 |
sh.getBalancerState();true |
备注:连接到 config 库操作。
4 停 Balancer 进程
1 |
mongos> sh.stopBalancer();Waiting for active hosts... |
备注:连接到 config 库操作。
5 开启 Balancer 进程
1 |
sh.startBalancer(); |
备注:连接到 config 库操作。
6 设置 Balancer 进程运行时间窗口
默认情况下Balancing 进程时时在运行 为了降低 Balancing 进程对系统的影响,也可以设置 Balancer 进程的运行时间窗口,让 Balancer 进程在指定时间窗口操作。
1 |
mongos> db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "23:00", stop : "6:00" } } }, true ) ; |
备注:以上设置 balancer 进程在 23:00 到 6:00 时间窗口执行,如果要设置时间窗口,确保在指定时间段内能够完成数据分布。
7删除 Balancer 进程运行时间窗口
1 |
mongos> db.settings.update({ "_id" : "balancer" }, { $unset : { activeWindow : 1 }}); |
8 参考
http://docs.mongodb.org/manual/administration/sharding/#balancer-operations
http://docs.mongodb.org/manual/core/sharding/#sharding-balancing
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/237931.html