签到成功

知道了

CNDBA社区CNDBA社区

MongoDB 4.4.14 升级到 5.0.8 操作手册

2022-05-11 17:19 3548 0 原创 MongoDB
作者: dave

1 MongoDB 升级说明


在之前的博客中我们了解了MongoDB的版本发布规则。

MongoDB 从5.0 开始 版本 命名规则发生改变
https://www.cndba.cn/dave/article/107951

在不同的版本中,都会删除、添加一些命令、方法、参数。 这个在每个版本的Release notes
中有详细的说明。

有时,我们为了解决某些bug,或者想利用新版本的某些特性,那么就需要升级MongoDB的版本。 http://www.cndba.cn/cndba/dave/article/107990

在MongoDB 5.0 之前,版本号由3个数字位组成:X.Y.Z。

  1. X.Y是 发行版本序列号 或者 开发版本序列号;
  2. Z是补丁号 或者 修订号。

因此,我们对MongoDB的升级也就涉及2个级别:

  1. 大版本号的升级
    就是升级X.Y。 MongoDB 不支持跨大版本的升级。 比如从3.6 升级到4.4 是不允许的,必须一级一级升级:3.6  4.0 4.2  4.4。 对于大版本的升级,除了MongoDB 软件之外,还需要注意检查Driver 的兼容性。
  2. 小版本升级
    就是升级Z 的序列号。 这个直接停止实例,替换mongod 文件即可。

因为从v4.4 开始,MongoDB tools和mongosh 都是需要独立部署的,所以只需要替换mongo,mongod,mongos 三个文件即可。

MongoDB 4.4 以后版本安装Database Tools 工具
https://www.cndba.cn/dave/article/107952

MongoDB Shell (mongosh) 工具说明
https://www.cndba.cn/dave/article/107986

2 升级操作示例


MongoDB 跨大版本的升级必须一级一级操作。 我们这里当前环境是4.4.14,可以直接升级到5.0.8。

2.1 Standalone 和 Replica Set 环境升级

单机版和副本集版本操作步骤是一样的,对于副本集环境就是多了一个主备切换的步骤。

2.1.1 检查特性兼容版本参数

在升级到5.0 之前,必须确保该参数是4.4。

shard1:SECONDARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{
        "featureCompatibilityVersion" : {
                "version" : "4.4"
        },
……

如果该参数不是4.4。使用如下命令修改成4.4:

db.adminCommand( { setFeatureCompatibilityVersion: “4.4” } )

2.1.2 正常关闭实例

这里必须正常关闭MongoDB 实例。

use admin
db.shutdownServer()

2.1.3 更新MongoDB 二进制文件

从官网下载5.0.8 的安装文件并解压缩:

[dave@www.cndba.cn_3 bin]# pwd
/data/mongodb-linux-x86_64-rhel70-5.0.8/bin
[dave@www.cndba.cn_3 bin]# ll
total 238632
-rwxr-xr-x 1 root root     15205 Apr 22 05:15 install_compass
-rwxr-xr-x 1 root root  58460872 Apr 22 06:01 mongo
-rwxr-xr-x 1 root root 109480888 Apr 22 06:02 mongod
-rwxr-xr-x 1 root root  76396488 Apr 22 05:40 mongos
[dave@www.cndba.cn_3 bin]#

[dave@www.cndba.cn_3 bin]# supervisorctl stop all
mongos: stopped
shard1: stopped
configdb: stopped
shard2: stopped
shard3: stopped
[dave@www.cndba.cn_3 bin]#

替换Bin文件:http://www.cndba.cn/cndba/dave/article/107990

[dave@www.cndba.cn_3 ~]# cd /usr/local/mongodb/bin
[dave@www.cndba.cn_3 bin]# ll
total 325224
-rwxr-xr-x 1 root root 13997360 Apr 30 11:31 bsondump
-rwxr-xr-x 1 root root    15205 May 11 14:10 install_compass
-rwxr-xr-x 1 root root 53690928 May 11 14:10 mongo
-rwxr-xr-x 1 root root 83353608 May 11 14:10 mongod
-rwxr-xr-x 1 root root 16769896 Apr 30 11:31 mongodump
-rwxr-xr-x 1 root root 16425456 Apr 30 11:31 mongoexport
-rwxr-xr-x 1 root root 17310776 Apr 30 11:31 mongofiles
-rwxr-xr-x 1 root root 16701752 Apr 30 11:31 mongoimport
-rwxr-xr-x 1 root root 17151264 Apr 30 11:31 mongorestore
-rwxr-xr-x 1 root root 65380944 May 11 14:10 mongos
-rwxr-xr-x 1 root root 16268112 Apr 30 11:31 mongostat
-rwxr-xr-x 1 root root 15931944 Apr 30 11:31 mongotop
[dave@www.cndba.cn_3 bin]# pwd
/usr/local/mongodb/bin
[dave@www.cndba.cn_3 bin]# rm -rf install_compass mongo mongod mongos
[dave@www.cndba.cn_3 bin]#


[dave@www.cndba.cn_3 bin]# cp * /usr/local/mongodb/bin/
[dave@www.cndba.cn_3 bin]# pwd
/data/mongodb-linux-x86_64-rhel70-5.0.8/bin
[dave@www.cndba.cn_3 bin]#

启动实例:http://www.cndba.cn/cndba/dave/article/107990

[dave@www.cndba.cn_3 bin]# supervisorctl start all
shard2: started
shard3: started
shard1: started
configdb: started
mongos: started
[dave@www.cndba.cn_3 bin]# mongo_conn 27018
MongoDB shell version v5.0.8
connecting to: mongodb://127.0.0.1:27018/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("463cddb0-b2f8-4dea-9916-675e5e08fabb") }
MongoDB server version: 5.0.8

2.1.4 更新特性兼容性参数

单机直接在admin库中执行,副本集环境在primary 节点的admin 库中执行。

db.adminCommand( { setFeatureCompatibilityVersion: “5.0” } )

对于大版本的升级,必须执行该命令,该命令会向内部的系统集合更新数据。 如果由于某种原因命令没有成功完成,可以重试该命令,因为操作是幂等的,多次执行结果一样。

对于副本集环境,该命令会隐士的执行replSetReconfig命令,以在配置文档中添加term 列。

其实这里也是MongoDB 只能逐级升级的原因,每个大版本的迭代只能在上个版本的基础上才能进行。

2.1.5 副本集环境

对于副本集环境,如果是primary 节点,可以先将主库降级,然后进行操作。 官方手册中也是建议采用副本集环境来进行操作,以避免对业务的影响。

[dave@www.cndba.cn_2 ~]# mongo_conn 27018
MongoDB shell version v4.4.13
shard1:PRIMARY> rs.stepDown(300)

MongoDB 4.4 副本集 维护步骤 说明
https://www.cndba.cn/dave/article/107981

2.2 Sharded Cluster 环境升级[官方步骤]

Shard cluster 环境步骤稍微多一些。 具体如下。

http://www.cndba.cn/cndba/dave/article/107990
http://www.cndba.cn/cndba/dave/article/107990

2.2.1 准备工作

对于升级到5.0 环境,所有cluster 成员版本必须是4.4。 并且兼容性参数也是4.4。

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

对于shards和 config 节点,必须确保没有副本集成员处于:ROLLBACK 和 RECOVERING 状态。http://www.cndba.cn/cndba/dave/article/107990

在升级前,建议备份一下config 数据库。

2.2.2 停止Balancer

连接到mongos 节点,执行如下命令,停止balancer:

sh.stopBalancer()

这里要注意,如果迁移正在进行,那么系统会等待进行中的迁移完成后才会停止balancer。 可以通过sh.isBalancerRunning() 命令来查看balancer 的当前状态。

查看balancer 状态:

sh.getBalancerState()

当该命令返回false时表示balancer 已经停止。

2.2.3 升级config server

在shard cluster 中,config 也是副本集环境,所以先在secondary 节点上执行升级。 然后对primary 节点降级再操作。

这里步骤和standalone 是一样的,需要注意的是每个节点替换bin文件重启后需要检查节点的状态,要确保副本集时正常工作的。

执行命令:http://www.cndba.cn/cndba/dave/article/107990

http://www.cndba.cn/cndba/dave/article/107990

rs.status()

正常会返回SECONDARY 或者 PRIMARY。

2.2.4 升级shards 节点

操作步骤同config server 节点一样。

2.2.5 升级mongos 实例

同standalone 节点操作一样,升级每个mongos 实例。

2.2.6 启用balancer

连接到mongos 节点并执行如下命令:

sh.startBalancer()http://www.cndba.cn/cndba/dave/article/107990

2.2.7 更新特性兼容性参数

在mongos 实例上的admin库中执行如下命令:

db.adminCommand( { setFeatureCompatibilityVersion: “5.0” } )

连接Mongos:

[dave@www.cndba.cn_2 bin]# mongo_conn 27000
MongoDB shell version v5.0.8
connecting to: mongodb://127.0.0.1:27000/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a6a0e85d-3043-49ea-9a08-5a5fb70b06a5") }
MongoDB server version: 5.0.8
mongos> db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1652259883, 1034),
                "signature" : {
                        "hash" : BinData(0,"FNUYDoaj6+cZRrygeS6+XqrluyQ="),
                        "keyId" : NumberLong("7093529851058978835")
                }
        },
        "operationTime" : Timestamp(1652259883, 1034)
}
mongos>

Shard 上验证:

[dave@www.cndba.cn_2 bin]# mongo_conn 27018
MongoDB shell version v5.0.8
connecting to: mongodb://127.0.0.1:27018/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("7760f820-c3fb-494e-b400-e9443a7afe54") }
MongoDB server version: 5.0.8
shard1:SECONDARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{
        "featureCompatibilityVersion" : {
                "version" : "5.0"
        },
        "ok" : 1,

2.3 Sharded Cluster 实际操作

官方手册讲的是理想部署情况,实际生产中, 物理主机一般都是复用的。同一台物理机上会部署多个节点。 因此官网的步骤就需要进行调整。

2.3.1 更换所有节点的MongoDB 二进制文件

在所有实例不关闭的情况下,直接更换MongoDB 的二进制文件。

在Linux系统设计里面遵循一切都是文件的原则,即磁盘文件、目录、网络套接字、磁盘、管道等,所有这些都是文件,在我们进行打开的时候会返回一个fd,即是文件句柄。

文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘的这些数据块中). 当你删除(rm)一个文件, 实际删除了指向inode的链接, 并没有删除inode的内容. 进程可能还在使用. 只有当inode的所有链接完全移去, 然后这些数据块将可以写入新的数据.

因此,即使我们在不停实例的情况直接替换文件,只要对应的进程没有重启,都不会有影响。

2.3.2 按官方步骤操作

然后按官方建议的步骤,逐个重启实例,只是不在需要替换文件。http://www.cndba.cn/cndba/dave/article/107990

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2296
    原创
  • 3
    翻译
  • 582
    转载
  • 198
    评论
  • 访问:8505325次
  • 积分:4477
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ