MongoDB系列文档

MongoDB系列文档1-MongoDB复制集简介
MongoDB系列文档2-复制的基本架构
MongoDB系列文档3-复制集中成员说明
MongoDB系列文档4-配置MongoDB复制集
MongoDB系列文档5-MongoDB分片介绍
MongoDB系列文档6-集群中数据分布
MongoDB系列文档7-数据区分
MongoDB系列文档8-部署分片集群
MongoDB系列文档9-分片集群的操作
MongoDB系列文档10-balance操作


2.6 balance操作

  查看mongo集群是否开启了 balance 状态

mongos> sh.getBalancerState()
true

  当然你也可以通过在路由节点mongos上执行sh.status() 查看balance状态。
如果balance开启,查看是否正在有数据的迁移
连接mongo集群的路由节点

mongos> sh.isBalancerRunning()
false

2.6.1 设置balance 窗口

(1)连接mongo集群的路由节点
(2)切换到配置节点

use config

(3)确定balance 开启中

sh.getBalancerState()

如果未开启,执行命令

sh.setBalancerState( true )

(4)修改balance 窗口的时间

db.settings.update(
   { _id: "balancer" },
   { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
   { upsert: true }
)

eg:

db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "00:00", stop : "5:00" } } }, 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.6.2 关闭balance

  默认balance 的运行可以在任何时间,只迁移需要迁移的chunk,如果要关闭balance运行,停止一段时间可以用下列方法:
(1) 连接到路由mongos节点
(2) 停止balance

sh.stopBalancer()

(3) 查看balance状态

sh.getBalancerState()

(4)停止balance 后,没有迁移进程正在迁移,可以执行下列命令

use configwhile( sh.isBalancerRunning() ) {
          print("waiting...");
          sleep(1000);
}

2.6.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 } )

2.6.4 关于集合的balance

关闭某个集合的balance

sh.disableBalancing("students.grades")

打开某个集合的balance

sh.enableBalancing("students.grades")

确定某个集合的balance是开启或者关闭

db.getSiblingDB("config").collections.findOne({_id : "students.grades").noBalance;}

2.6.5 问题解决

mongodb在做自动分片平衡的时候,或引起数据库响应的缓慢,可以通过禁用自动平衡以及设置自动平衡进行的时间来解决这一问题。
(1)禁用分片的自动平衡

// connect to mongos> use config> db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );

(2)自定义 自动平衡进行的时间段

// connect to mongos> use config> db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "21:00", stop : "9:00" } } }, true )

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code