更新时间:2023-08-15 GMT+08:00

如何管理均衡器Balancer

使用场景

因为Balancer在进行块迁移时会占用节点的系统资源,可能导致集群的读写性能出现一定程度的下降,因此如果您已开启数据分片并且对实例性能有较高要求或者业务流量有比较明显的高低峰差异时,为避免影响业务:

使用限制

  • 只有集群实例支持Balancer功能管理操作。
  • Balancer功能默认是开启状态。

开启Balancer

  1. 通过Mongo Shell连接集群实例
  2. 在mongos节点命令行中,切换至config数据库。

    use config

  3. 执行如下命令,开启Balancer功能。

    sh.setBalancerState(true)

关闭Balancer

  1. 通过Mongo Shell连接集群实例
  2. 在mongos节点命令行中,切换至config数据库。

    use config

  3. 执行如下命令,查看Balancer运行状态。

    while( sh.isBalancerRunning() ) {
              print("waiting...");
              sleep(500);
    } 
    • 如返回值为空,则表示Balancer没有处于执行任务的状态,此时可执行下一步的操作,关闭Balancer 。
    • 如返回值为waiting,则表示Balancer正在执行块迁移,此时不能执行关闭Balancer的命令,否则可能引起数据不一致。

  4. 如执行步骤 3的命令后返回的值为空,可执行关闭Balancer命令。

    sh.stopBalancer()

设置Balancer的活动窗口

为避免迁移给业务带来影响,您可以通过该操作使Balancer在规定时间内工作。

处于关闭状态的Balancer无法设置活动窗口。所以设置之前,请先开启Balancer

  1. 通过Mongo Shell连接集群实例
  2. 在mongos节点命令行中,切换至config数据库。

    use config

  3. 执行如下命令,设置Balancer的活动窗口。

    db.settings.update(
       { _id: "balancer" },
       { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
       { upsert: true }
    )
    • <start-time>:开始时间,时间格式为HH:MM(UTC时间),HH取值范围为00 - 23,MM取值范围为00 - 59。
    • <stop-time>:结束时间,时间格式为HH:MM(UTC时间),HH取值范围为00 - 23,MM取值范围为00 - 59。

    执行sh.status()命令,查看Balancer的活动窗口。如图1所示,活动窗口被设置为22:00 - 24:00。

    图1 查看Balancer的活动窗口

去除Balancer的活动窗口

如需Balancer始终处于运行状态,请按照如下命令设置:

db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })

数据库基本使用 所有常见问题

more