快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → MongoDB balancer的版本差异

MongoDB balancer的版本差异

时间:2022-09-18 20:10:27人气:作者:快盘下载我要评论

//

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集群的状态的时候,发现了下面的情况:

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功能模块也被关闭了。

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

MongoDB balancer的版本差异

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

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集合中写入相关数据来实现,如下:

{ "_id" : "balancer", "mode" : "full", "stopped" : false }
{ "_id" : "autosplit", "enabled" : true }

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

相关文章

  • 一步步带你设计MySQL索引数据结构

    一步步带你设计MySQL索引数据结构,想想我们生活中的例子,比如新华字典,我们有一个目录,目录根据拼音排序,内容包含了汉字位于字典中具体的的页码。聪明的你肯定也想到了,我们也可以借鉴这种思想,建立一个MySQL的目录,叫做“索引”。...
  • 影刀连接Mysql数据库

    影刀连接Mysql数据库,影刀配置连接mysql数据库基础版...

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。