前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB balancer的版本差异

MongoDB balancer的版本差异

作者头像
AsiaYe
发布2021-07-14 13:14:38
6870
发布2021-07-14 13:14:38
举报
文章被收录于专栏:DBA随笔

//

MongoDB balancer的版本差异

//

这几天在做一个MongoDB的版本升级,升级的过程中发现了不同版本balancer的一个小差异。这里记录下。

本次升级的目的是线上一个集群从4.0.4升级到4.2.14版本。

升级方法:

在升级的过程中,利用数据同步工具,将4.0.4的分片集群数据同步到4.2.14版本的分片集群中,最后通过业务切换来实现升级。

Balancer相关操作:

同步过程中,为了加快同步的速度,在目标端关闭了4.2.14版本的balancer,相关命令是:

sh.setbalancerstate(false),避免chunk搬迁导致的写入性能变差。

最终结果:

最终数据同步完成,意外发现源端集群和目标集群的分片数量不一致了,源端集群上有500多个分片,但是在目标集群上只有2个分片。

当我们使用sh.status()命令查看当前sharding集群的状态的时候,发现了下面的情况:

代码语言:javascript
复制
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5f4766144099611dfdd12e97")
  }
  shards:
        {  "_id" : "test1",  "host" : "test1/xxx",  "state" : 1 }
        {  "_id" : "test2",  "host" : "test2/xxx",  "state" : 1 }
  active mongoses:
        "4.2.5" : 1
  autosplit:
        Currently enabled: no
  balancer:
        Currently enabled:  no
        Currently running:  no

可以看到,这个集群的autosplit功能模块也被关闭了。

于是查看了下官方文档,发现了下面这句话:

Starting in MongoDB 4.2, sh.startBalancer() also enables auto-splitting for the sharded cluster.

也就是说,从4.2版本开始,开启Balancer会开启chunk的自动分裂,而关闭Balancer也会关闭chunk的自动分裂。通过下面的代码,可以证明:

代码语言:javascript
复制
mongos> sh.setBalancerState(true)
{
        "ok" : 1,
        "operationTime" : Timestamp(1624204578, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1624204578, 2),
                "signature" : {
                        "hash" : BinData(0,"baKnEwcXN5bHr56N3D7hmuKq0SQ="),
                        "keyId" : NumberLong("6966117271106224131")
                }
        }
}
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5f4766144099611dfdd12e97")
  }
  shards:
        {  "_id" : "test1",  "host" : "test1/10.41.15.139:45020,10.69.2.202:45020",  "state" : 1 }
        {  "_id" : "test2",  "host" : "test2/10.41.28.104:45021",  "state" : 1 }
  active mongoses:
        "4.2.5" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no

而在MongoDB4.0版本中,关闭或者打开balancer不会影响chunk的autosplit操作。

解决方案:

如果发现源端和目标端的数据一致,但是分片数量不一致的情况,可以通过开启Balancer,然后进行数据插入和数据更新的操作,这样,MongoDB就会自动进行chunk的split操作了。

补充说明:

1、在MongoDB 4.0版本中,当我们关闭balancer或者打开balancer的时候,不会影响chunk的split操作,也就是说,chunk会进行分裂操作,但是出现chunk差的时候,不进行chunk搬迁操作

2、在MongoDB 4.2版本中,如果我们关闭balancer,chunk的split操作也会随之关闭,如果我们打开balancer,chunk的split操作也会随之打开。

3、如果想在MongoDB 4.2的版本中,仅仅关闭balancer,而打开chunk split,可以通过在config数据库的settings集合中写入相关数据来实现,如下:

代码语言:javascript
复制
{ "_id" : "balancer", "mode" : "full", "stopped" : false }
{ "_id" : "autosplit", "enabled" : true }

上面的记录代表关闭balancer,但是打开chunk的autosplit操作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档