
# 如何管理均衡器Balancer
#### 操作场景
因为Balancer在进行块迁移时会占用节点的系统资源，可能导致集群的读写性能出现一定程度的下降，因此如果您已开启数据分片并且对实例性能有较高要求或者业务流量有比较明显的高低峰差异时，为避免影响业务：
- 建议在业务低峰期时[开启Balancer]。
- 建议在业务高峰期时[关闭Balancer]。
- 建议[设置Balancer的活动窗口]，让其在业务低峰期工作。
 
#### 约束限制
- 只有集群实例支持Balancer功能管理操作。
- Balancer功能默认是开启状态。
 
#### 操作步骤
- [开启Balancer]
  
  1. [通过Mongo Shell连接集群实例](https://support.huaweicloud.com/usermanual-dds/dds_03_0314.html)。
  
  2. 在dds mongos节点命令行中，切换至config数据库。 
     ```
     use config
     ```
     
     
  
  3. 执行如下命令，开启Balancer功能。 
     ```
     sh.setBalancerState(true)
     ```
     
     
   
- [关闭Balancer]
  
  1. [通过Mongo Shell连接集群实例](https://support.huaweicloud.com/usermanual-dds/dds_03_0314.html)。
  
  2. 在dds 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在规定时间内工作。
  ![](https://support.huaweicloud.com/dds_faq/public_sys-resources/note_3.0-zh-cn.png)
  处于关闭状态的Balancer无法设置活动窗口。所以设置之前，请先[开启Balancer]。
  1. [通过Mongo Shell连接集群实例](https://support.huaweicloud.com/usermanual-dds/dds_03_0314.html)。
  
  2. 在dds mongos节点命令行中，切换至config数据库。 
     ```
     use config
     ```
     
     
  
  3. 执行如下命令，设置Balancer的活动窗口。 
     ```
     db.adminCommand({"setBalancerActiveWindow": 1, start : "<start-time>", stop : "<stop-time>"})
     ```
     ![](https://support.huaweicloud.com/dds_faq/public_sys-resources/note_3.0-zh-cn.png)
     - \<start-time\>：开始时间，时间格式为HH:MM（UTC时间），HH取值范围为00 - 23，MM取值范围为00 - 59。
     
     - \<stop-time\>：结束时间，时间格式为HH:MM（UTC时间），HH取值范围为00 - 23，MM取值范围为00 - 59。
     
     - 使用rwuser执行setBalancerActiveWindow调整balancer时间窗口，如出现"CommandNotFound"报错，其原因是小版本低。发生此情况请升级实例小版本后尝试，或您可以[提交工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)申请，完成工单提交。
      
     执行**sh.status()** 命令，查看Balancer的活动窗口。如[图1]所示，活动窗口被设置为22:00 - 24:00。
     图1查看Balancer的活动窗口   
     ![](https://support.huaweicloud.com/dds_faq/zh-cn_image_0000001667579701.png "点击放大")
     
     
   
- [去除Balancer的活动窗口]
  如需Balancer始终处于运行状态，请按照如下命令设置：
  ```
  db.adminCommand({ 'unsetBalancerActiveWindow' : 1 })
  ```
#### 相关API
| API                                                                      | 说明            |
|:---|:---|
| [查询集群均衡设置](https://support.huaweicloud.com/api-dds/dds_api_0110.html)    | 查询集群的均衡设置。    |
| [设置集群均衡开关](https://support.huaweicloud.com/api-dds/dds_api_0111.html)    | 设置集群的均衡开关。    |
| [设置集群均衡活动时间窗](https://support.huaweicloud.com/api-dds/dds_api_0112.html) | 设置集群的均衡活动时间窗。 |
   
