1、查看mongo集群是否开启了 balance 状态
mongos> sh.getBalancerState()
true
当然你也可以通过在路由节点mongos上执行sh.status() 查看balance状态。
1.1 如果balance开启,查看是否正在有数据的迁移
连接mongo集群的路由节点
mongos> sh.isBalancerRunning()
false
1.2 设置balance 窗口
(1)连接mongo集群的路由节点
(3)确定balance 开启中
sh.getBalancerState()
如果未开启,执行命令
sh.setBalancerState( true )
(4)修改balance 窗口的时间
db.settings.update(
{ _id: "balancer" },
{ $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
{ upsert: true }
)
当你设置了activeWindow,就不能用sh.startBalancer() 启动balance
NOTE
The balancer window must be sufficient to complete the migration of all data inserted during the day.
As data insert rates can change based on activity and usage patterns, it is important to ensure that the balancing window you select will be sufficient to support the needs of your deployment.
(5)删除balance 窗口
use config
db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })
2 关闭balance
默认balance 的运行可以在任何时间,只迁移需要迁移的chunk,如果要关闭balance运行,停止一段时间可以用下列方法:
(1) 连接到路由mongos节点
(2) 停止balance
sh.stopBalancer()
(3) 查看balance状态
sh.getBalancerState()
(4)停止balance 后,没有迁移进程正在迁移,可以执行下列命令
use config
while( sh.isBalancerRunning() ) {
print("waiting...");
sleep(1000);
}
3 打开balance
如果你关闭了balance,准备重新打开balance
(1) 连接到路由mongos节点
(2) 打开balance
sh.setBalancerState(true)
如果驱动没有命令 sh.startBalancer(),可以用下列命令
use config
db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , { upsert: true } )
4、关于集合的balance
关闭某个集合的balance
sh.disableBalancing("students.grades")
打开某个集合的balance
sh.enableBalancing("students.grades")
确定某个集合的balance是开启或者关闭
db.getSiblingDB("config").collections.findOne({_id : "students.grades"}).noBalance;