步步为营,mongodb3.2.x版本升级至4.2.x版本全过程——面向standalone和副本集部署模式

注:
mongodb所有部署模式都不可以跨版本升级
3.2.x版本升级到4.2.x版本升级路线如下:
1.升级至3.4.x版本
2.升级至3.6.x版本
3.升级至4.0.x版本
4.升级至4.2.x版本

一.standalone部署模式升级步骤

1.1 升级前准备

1.在官网下载好各版本mongodb安装包。
2.停止所有应用程序对mongodb的读写操作。(保险起见可先关闭防火墙中开启的mongod实例端口)
3.备份数据库数据,目的:一旦升级版本很难降级,假如出现问题,可执行版本回滚,进行数据库恢复。

1.2 执行升级

1.2.1 升级至3.4.x版本:

1.下载3.4.x版本gz文件,然后解压
2.使用3.4.x版本bin目录下mongod shell,用现有mongo.conf配置启动实例
3.启动实例后使用mongo shell登录mongodb控制台
执行修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

如果报错:

{
	"ok" : 0,
	"errmsg" : "not authorized on admin to execute command { setFeatureCompatibilityVersion: \"3.4\" }",
	"code" : 13,
	"codeName" : "Unauthorized"
}

需添加root角色用户,或使用具有root角色用户账户登录
添加root角色用户方式如下:

use admin;
db.createUser({"user":"dbupdater","pwd":"l79bv2PA","roles":[{role:"root",db:"admin"}]})
db.auth('dbupdater','l79bv2PA')

再使用新创建的root角色用户登录,执行修改兼容性版本为3.4命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

4.查看当前兼容性版本:

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

返回

{ "featureCompatibilityVersion" : "3.4", "ok" : 1 }

说明兼容性版本更改成功

1.2.2 从3.4.x版本升级至3.6.x版本

1.关闭3.4的mongod进程,启动3.6的mongod
2.执行修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )

返回:

{ "ok" : 1 }

执行成功
3.查看当前兼容性版本:

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

返回:

{ "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 }

兼容性版本更改成功

1.2.3 从3.6.x版本升级至4.0.x版本(操作同上)

1.关闭3.6的mongod进程,启动4.0的mongod
2.执行修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )

返回:

{ "ok" : 1 }

执行成功
3.查看当前兼容性版本:

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

返回:

{ "featureCompatibilityVersion" : { "version" : "4.0" }, "ok" : 1 }

升级成功

1.2.4 从4.0.x版本升级至4.2.x版本(操作同上)

注:从4.2.x版本开始,mongodb将不再支持MMPv1引擎,相关配置项将失效

1.关闭4.0.x版本的mongod进程,启动4.2.x的mongod
2.执行修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )

返回:

{ "ok" : 1 }

查看当前兼容性版本:

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

返回:

{ "featureCompatibilityVersion" : { "version" : "4.2" }, "ok" : 1 }

standalone部署模式升级完成。

二.副本集部署模式升级步骤

注:
可参考官网不停机平滑升级模式(对业务影响较小):
1.先在primary节点执行rs.stepDown()触发副本集primary节点的降级。
2.执行rs.status()命令,查看primary节点降级是否成功,stateStr变为SECONDARY,则成功。
3.停止该节点mongod进程 使用3.4.x版本二进制文件替换原文件,按副本集模式重启该mongod。 依次替换所有节点的二进制文件。
4.在primary节点,执行修改兼容性版本命令(会自动同步到其他副本集节点): db.adminCommand( {
setFeatureCompatibilityVersion: “3.4” } )
5.查看当前兼容性版本是否修改成功:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

本方案采用停机升级方式。

2.1 升级前准备

1.停止所有应用程序对mongodb的读写操作。(保险起见可先关闭防火墙中开启的mongod实例端口)
2.备份数据库数据,目的:一旦升级版本很难降级,假如出现问题,可执行版本回滚,进行数据库恢复。
3.创建具有clusterAdmin角色的用户
4.下载各版本mongodb文件并准备好数据库配置文件。

创建具有clusterAdmin角色的用户方式如下:
a.使用具有clusterAdmin角色的用户登录mongo shell:

use admin
db.getCollection("system.users").find({})

b.查询是否有具有clusterAdmin,若无,添加具有clusterAdmin角色的用户。

exp:
db.createUser({"user":"abc","pwd":"123456","roles":[{role:"root",db:"admin"},{role:"clusterAdmin",db:"admin"}]})
db.auth('abc','123456')

注:
如遇执行命令报错: not authorized on admin to execute command 解决方式:
注释当前副本集节点的副本集相关配置,以standalone模式创建mongod实例,再登录mongo shell创建用户

创建完成后
还原注释掉的副本集配置,以副本集模式重启该mongod实例。

2.2 执行升级

2.2.1 从3.2.x版本升级到3.4.x版本

使用创建的clusterAdmin角色用户登录mongodb
在副本集primary节点依次执行(兼容性版本设置,会自动同步到副本集节点):
1.修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

2.查看当前兼容性版本是否修改成功:

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

注:
3.4.x版本如果遇到mongod启动失败,日志报错: exception in initAndListen: 28595 -31802: WT_ERROR: non-specific WiredTiger error, terminating 需进入数据文件夹 执行如下删除命令
rm -rf journal rm -rf mongod.lock rm -rf WiredTiger.lock

待所有副本集节点同步完成进行下一步

2.2.2 从3.4.x版本升级到3.6.x版本

停止所有mongod实例(请使用如下方式停止mongod实例,而非kill进程方式):
打开mongo shell,执行:

use admin
db.shutdownServer()

注: 须在配置文件中增加 bind_ip_all = true 配置
允许mongod和mongo实例使用所有连接,否则只能通过127.0.0.1访问。该配置从3.6版本开始支持,详情参见:https://docs.mongodb.com/manual/reference/configuration-options/index.html#net.bindIpAll
否则会出现副本集节点之间报错:
HostUnreachable: Connection refused

1.使用3.6.x版本重启所有副本集实例。
2.采用之前方式,在副本集primary节点执行(兼容性版本设置,会自动同步到副本集节点)。
修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

查看当前兼容性版本是否修改成功:

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

待所有副本集节点同步完成进行下一步

2.2.3 从3.6.x版本升级到4.0.x版本

1.停止所有mongod实例(请使用这种方式停止mongod实例,而非kill进程方式):
打开mongo shell,执行:

use admin
db.shutdownServer()

2.使用4.0.x版本重启所有副本集实例
3.采用之前方式,在副本集primary节点执行(兼容性版本设置,会自动同步到副本集节点)
修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

查看当前兼容性版本是否修改成功:

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

待所有副本集节点同步完成进行下一步

2.2.4 从4.0.x版本升级到4.2.x版本

1.停止所有mongod实例(请使用这种方式停止mongod实例,而非kill进程方式):
打开mongo shell,执行:

use admin
db.shutdownServer()

2.使用4.2.x版本重启所有副本集实例
3.采用之前方式,在副本集primary节点执行(兼容性版本设置,会自动同步到副本集节点)
修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

查看当前兼容性版本是否修改成功:

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

待所有副本集节点同步完成,重启所有mongod实例,升级完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章