MongoDB balancer的使用详解


Posted in MongoDB onApril 30, 2021

   在MongoDB中,balancer(平衡器)是一个后台进程,它监控每个shard上的chunk数量,一旦chunk的数量差异超过了阈值,balancer会自动迁移数据块,从而保证每个分片上chunk数量的相对平衡。

   整个搬迁的过程对于用户来说是透明的,但是搬迁的过程中会对用户产生一些影响。

01 balancer简介

   从MongoDB3.4开始,balancer运行在config server的主节点上。

    在3.4版本中,balancer进程活跃期间,config server的主节点通过修改locks集合中的一个_id为balancer的文档,来持有"balancer lock";

    3.6版本中,balancer不再持有锁

    默认的情况下,balancer始终处于开启状态,可以使用下面的命令来查看balancer的运行情况:

mongos> sh.getBalancerState()
true

    同样的,我们可以使用下面几个命令来简单的管理balancer:

查看banlancer是否正在工作
sh.isBalancerRunning() 

停止balancer
sh.stopBalancer()

启动balancer
sh.setBalancerState( true )

02 balancer工作中可能对业务造成的影响?

1、磁盘占用:
   从MongoDB2.6开始,MongoDB会自动归档迁移的chunk文档,以方便在chunk搬迁过程中出现问题后的文档恢复。

   我们可以通过配置文件中的参数:sharding.archiveMovedChunks

来控制是否开启迁移过程中chunk的自动归档,该参数在MongoDB2.6和3.0版本是默认开启的,其他版本都是默认关闭的。

2、带宽和负载占用:

    balancer再对chunk迁移过程中,会造成带宽和负载方面的开销。为了减轻这些影响,平衡器做了如下的工作:

a、一次迁移只能迁一个chunk,

b、一个shard同一时间只能执行一个迁移任务

c、从MongoDB3.4开始,引入了并行的chunk迁移,对于一个有n个shard的集群,每次最多并行迁移n/2(向下取整)个数据块

d、只有当chunk数量最多的shard和chunk数量最少的shard的差异达到阈值的时候,才开始迁移chunk

e、支持用户设置balancer的窗口时间,在业务低峰窗口时间内进行chunk的迁移工作,从而最大程度减轻对业务的影响。

03 设置balancer的执行时间窗口

 1、通过mongo shell连接到mongos上

2、切换到config数据库

    use config

3、确保当前balancer是开启的

    sh.getBalancerState()  返回true

4、设置窗口时间

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

其中,start-time和stop-time的取值如下:

  • For HH values, use hour values ranging from 00 - 23.
  • For MM value, use minute values ranging from 00 - 59.

MongoDb会以config数据库的primary节点的时间为参考,开始执行相关chunk的搬迁操作。

要确保设置的时间范围内,所有的chunk能够搬迁完毕,否则会出现数据库搬迁过后,依旧不均衡的现象。

移除chunk搬迁时间窗口的命令如下:

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

04 备份和balancer

   MongoDB中,不要在备份的时候启用balancer,否则,备份的数据将会不一致。通常情况下,备份的时间窗口要和balancer的时间窗口错开,如果balancer没有设置时间窗口,则在备份的时候,关闭balancer

   时间关系,就先到这里吧,其他内容后面再说

以上就是MongoDB balancer的使用详解的详细内容,更多关于MongoDB balancer的使用的资料请关注三水点靠木其它相关文章!

MongoDB 相关文章推荐
MongoDB 常用的crud操作语句
Jun 20 MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
浅析MongoDB之安全认证
Jun 26 MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
mongodb清除连接和日志的正确方法分享
Sep 15 MongoDB
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
Nov 01 MongoDB
MongoDB连接数据库并创建数据等使用方法
Nov 27 MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 MongoDB
MongoDB数据库部署环境准备及使用介绍
Mar 21 MongoDB
mongoDB数据库索引快速入门指南
Mar 23 MongoDB
Mongodb 迁移数据块的流程介绍分析
Apr 18 MongoDB
MongoDB使用profile分析慢查询的步骤
Apr 30 #MongoDB
MongoDB数据库的安装步骤
Jun 18 #MongoDB
MongoDB数据库常用的10条操作命令
Jun 18 #MongoDB
MongoDB 常用的crud操作语句
Jun 20 #MongoDB
MongoDB orm框架的注意事项及简单使用
Jun 20 #MongoDB
详解MongoDB的条件查询和排序
Jun 23 #MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 #MongoDB
You might like
php不写闭合标签的好处
2014/03/04 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
windows下python连接oracle数据库
2017/06/07 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
Servlet方面面试题
2016/09/28 面试题
医学专业毕业生个人的求职信
2013/12/04 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
大学生实习证明范本
2014/01/15 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
SQL写法--行行比较
2021/08/23 SQL Server
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫