文章目录
注:
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.6" } )
查看当前兼容性版本是否修改成功:
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: "4.0" } )
查看当前兼容性版本是否修改成功:
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: "4.2" } )
查看当前兼容性版本是否修改成功:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
待所有副本集节点同步完成,重启所有mongod实例,升级完成。