MongoDB 3.4 升级到 4.4
-
升级级时长与 MongoDB 数据库中集合数量有直接关系
可通过find /data/mongodb/ -name '*collection*' | wc -l
查看集合数量
例如:集合数在1万个以内需1分钟,10万约10分钟,30万约30分钟,另外也会受服务器磁盘性能影响重启升级时长 -
本文档示例命令中,MongoDB 程序所在路径为
/usr/local/mongodb/
,数据目录为/data/mongodb/
,如有不同注意修改对应命令
单节点
提前准备
-
参考 Docker 安装章节 在 MongoDB 服务器上安装 Docker
-
拉取升级辅助镜像(离线包下载):
docker pull nocoly/hap-sc-upgrade:1.0.0
-
下载 MongoDB v4.4.29 安装包,并上传至服务器
- RedHat / CentOS 7.0 x64
- RedHat / CentOS 8.0 x64
- Debian 10.0+ x64
- 其他
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.29.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.29.tgz
- 如果操作系统高于 Debian 10,则先安装 libssl1.1 依赖
下载链接:https://pdpublic.nocoly.com/offline/common/libssl1.1_1.1.1w-0+deb11u1_amd64.deb
安装命令:dpkg -i libssl1.1_1.1.1w-0+deb11u1_amd64.deb- 下载 MongoDB 安装包
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian10-4.4.29.tgz
- 其他操作系统的安装包可到 MongoDB 官方下载地址 进行挑选下载
- EulerOS、麒麟、UOS 等信创操作系统,通常可使用 CentOS 7/8 相同的安装包
-
解压 MongoDB v4.4.29安装包,并检查安装包中
mongod
程序是否缺少依赖,如缺少依赖根据实际情况进行安装- RedHat / CentOS 7.0 x64
- RedHat / CentOS 8.0 x64
- Debian 10.0+ x64
解压 MongoDB v4.4.29 安装包
tar xvf mongodb-linux-x86_64-rhel70-4.4.29.tgz
检查安装包中的
mongod
程序是否缺少依赖ldd mongodb-linux-x86_64-rhel70-4.4.29/bin/mongod
解压 MongoDB v4.4.29 安装包
tar xvf mongodb-linux-x86_64-rhel80-4.4.29.tgz
检查安装包中的
mongod
程序是否缺少依赖ldd mongodb-linux-x86_64-rhel80-4.4.29/bin/mongod
解压 MongoDB v4.4.29 安装包
tar xvf mongodb-linux-x86_64-debian10-4.4.29.tgz
检查安装包中的
mongod
程序是否缺少依赖ldd mongodb-linux-x86_64-debian10-4.4.29/bin/mongod
开始升级
MongoDB 升级需逐版本依次升级。 3.4 升级到 4.4 需要依次升级到 3.6、4.0、4.2、4.4,一共需执行 4 次升级命令。
升级过程中如果提示版本不匹配,则需要重复执行上一个升级命令(如:3.4 升级到 3.6 执行成功后,3.6 升级到 4.0 提示失败,则需要再次执行 3.4 升级到 3.6 的命令,直到输出 exit upgrade),如果尝试多次依然出错则可通过/data/mongodb/upgrade-xxxx.log
查看具体原因。
-
停止微服务
-
对 MongoDB 进行数据备份
-
停止现有 MongoDB 实例
systemctl stop mongodb
-
升级 MongoDB 版本
3.4 到 3.6
docker run -i --rm -v /data/mongodb:/data/mongodb nocoly/hap-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 3.4 3.6'
3.6 到 4.0
docker run -i --rm -v /data/mongodb:/data/mongodb nocoly/hap-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 3.6 4.0'
4.0 到 4.2
docker run -i --rm -v /data/mongodb:/data/mongodb nocoly/hap-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 4.0 4.2'
4.2 到 4.4
docker run -i --rm -v /data/mongodb:/data/mongodb nocoly/hap-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 4.2 4.4'
-
将现有的安装包替换为 v4.4.29 版本的安装包
mv /usr/local/mongodb /usr/local/mongodb.bak-v3.4
cp -r mongodb-linux-x86_64-rhel70-4.4.29 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb /data/mongodb- 拷贝 MongoDB v4.4.29 安装包名称以实际为准
-
修改 MongoDB 启动命令参数,添加
--bind_ip 0.0.0.0
参数vim /etc/systemd/system/mongodb.service
# 在 ExecStart 启动命令后追加 --bind_ip 0.0.0.0 参数 -
重载 systemd 并启动 MongoDB
systemctl daemon-reload
systemctl start mongodb -
登录 MongoDB,查询 featureCompatibilityVersion
/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )- 输出
{ "featureCompatibilityVersion" : { "version" : "4.4" }, "ok" : 1 }
代表升级成功 👏 👏
- 输出
副本集
提前准备
-
下载升级所需各版本的 mongodb 安装包,并上传至各服务器
- RedHat / CentOS 7.0 x64
- RedHat / CentOS 8.0 x64
- Debian 10.0+ x64
- 其他
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.23.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.25.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.29.tgzhttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.23.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.2.25.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.29.tgz- 如果操作系统高于 Debian 10,则先安装 libssl1.1 依赖
下载链接:https://pdpublic.nocoly.com/offline/common/libssl1.1_1.1.1w-0+deb11u1_amd64.deb
安装命令:dpkg -i libssl1.1_1.1.1w-0+deb11u1_amd64.deb- 下载 mongodb 安装包
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.23.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian10-4.2.25.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian10-4.4.29.tgz- 其他操作系统的安装包可到 MongoDB 官方下载地址 进行挑选下载
- EulerOS、麒麟、UOS 等信创操作系统,通常可使用 CentOS 7/8 相同的安装包
-
解压各版本安装包,并检测各安装包中的
mongod
程序是否缺少依赖,如缺少依赖根据实际情况进行安装- RedHat / CentOS 7.0 x64
- RedHat / CentOS 8.0 x64
- Debian 10.0+ x64
解压各版本安装包
tar xvf mongodb-linux-x86_64-3.6.23.tgz
tar xvf mongodb-linux-x86_64-4.0.28.tgz
tar xvf mongodb-linux-x86_64-rhel70-4.2.25.tgz
tar xvf mongodb-linux-x86_64-rhel70-4.4.29.tgz检查各版本安装包中的
mongod
程序是否缺少依赖ldd mongodb-linux-x86_64-3.6.23/bin/mongod
ldd mongodb-linux-x86_64-4.0.28/bin/mongod
ldd mongodb-linux-x86_64-rhel70-4.2.25/bin/mongod
ldd mongodb-linux-x86_64-rhel70-4.4.29/bin/mongod解压各版本安装包
tar xvf mongodb-linux-x86_64-3.6.23.tgz
tar xvf mongodb-linux-x86_64-4.0.28.tgz
tar xvf mongodb-linux-x86_64-rhel80-4.2.25.tgz
tar xvf mongodb-linux-x86_64-rhel80-4.4.29.tgz检查各版本安装包中的
mongod
程序是否缺少依赖ldd mongodb-linux-x86_64-3.6.23/bin/mongod
ldd mongodb-linux-x86_64-4.0.28/bin/mongod
ldd mongodb-linux-x86_64-rhel80-4.2.25/bin/mongod
ldd mongodb-linux-x86_64-rhel80-4.4.29/bin/mongod解压各版本安装包
tar xvf mongodb-linux-x86_64-3.6.23.tgz
tar xvf mongodb-linux-x86_64-4.0.28.tgz
tar xvf mongodb-linux-x86_64-debian10-4.2.25.tgz
tar xvf mongodb-linux-x86_64-debian10-4.4.29.tgz检查各版本安装包中的
mongod
程序是否缺少依赖ldd mongodb-linux-x86_64-3.6.23/bin/mongod
ldd mongodb-linux-x86_64-4.0.28/bin/mongod
ldd mongodb-linux-x86_64-debian10-4.2.25/bin/mongod
ldd mongodb-linux-x86_64-debian10-4.4.29/bin/mongod
开始升级
-
升级前先停止微服务,随后对 MongoDB 进行数据备份
-
升级副本集,必须依次单独升级每个节点,从 SECONDARY 节点开始,到 PRIMARY 节点结束
从 3.4 升级到 3.6
-
升级副本集的 SECONDARY 节点(一次升级一个 SECONDARY 节点)
停止现有 MongoDB 实例,将现有的安装包替换为 3.6 版本的安装包
systemctl stop mongodb
mv /usr/local/mongodb /usr/local/mongodb.bak-3.4
cp -r mongodb-linux-x86_64-3.6.23 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb- 拷贝 MongoDB 3.6.23 安装包名称以实际为准
-
修改 MongoDB 启动命令参数,添加
--bind_ip 0.0.0.0
参数vim /etc/systemd/system/mongodb.service
# 在 ExecStart 启动命令后追加 --bind_ip 0.0.0.0 参数 -
重载 systemd 并启动 MongoDB
systemctl daemon-reload
systemctl start mongodb- 启动后可以尝试登录此节点,能登录上基本就正常,如果登录不上需要检查程序状态或者可能是数据量大,磁盘性能太低导致启动过慢
-
两个 SECONDARY 节点升级步骤一致
-
降级 PRIMARY 节点
登录到 MongoDB 主节点,使用
rs.stepDown()
命令降级主节点并强制选举新的主节点/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> rs.stepDown() -
升级旧 PRIMARY 节点,步骤与升级其他 SECONDARY 节点一致,分别为:
- 停止现有 MongoDB 实例,将现有的安装包替换为 3.6 版本的安装包
- 修改 MongoDB 启动命令参数,添加
--bind_ip 0.0.0.0
参数 - 重载 systemd 并启动 MongoDB
-
登录 PRIMARY 节点,设置功能兼容性版本为 3.6
/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )- 输出正常包含:
{ "ok" : 1 }
检查各节点状态
> rs.status()
- 正常应为一个 PRIMARY,两个 SECONDARY
查询 featureCompatibilityVersion
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
- 输出包含
{ "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 }
代表升级到 3.6 版本成功 👏 👏
- 输出正常包含:
从 3.6 升级到 4.0
-
升级副本集的 SECONDARY 节点(一次升级一个 SECONDARY 节点)
停止现有 MongoDB 实例,将现有的安装包替换为 4.0 版本的安装包后启动 MongoDB
systemctl stop mongodb
mv /usr/local/mongodb /usr/local/mongodb.bak-3.6
cp -r mongodb-linux-x86_64-4.0.28 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb
systemctl start mongodb- 拷贝 MongoDB 4.0.28 安装包名称以实际为准
- 启动后可以尝试登录此节点,能登录上基本就正常,如果登录不上需要检查程序状态或者可能是数据量大,磁盘性能太低导致启动过慢
-
两个 SECONDARY 节点升级步骤一致
-
降级 PRIMARY 节点
登录到 MongoDB 主节点,使用
rs.stepDown()
命令降级主节点并强制选举新的主节点/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> rs.stepDown() -
升级旧 PRIMARY 节点,步骤与升级 SECONDARY 节点一致
-
登录 PRIMARY 节点,设置功能兼容性版本为 4.0
/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )- 输出正常包含:
{ "ok" : 1 }
检查各节点状态
> rs.status()
- 正常应为一个 PRIMARY,两个 SECONDARY
查询 featureCompatibilityVersion
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
- 输出包含
{ "featureCompatibilityVersion" : { "version" : "4.0" }, "ok" : 1 }
代表升级到 4.0 版本成功 👏 👏
- 输出正常包含:
从 4.0 升级到 4.2
-
升级副本集的 SECONDARY 节点(一次升级一个 SECONDARY 节点)
停止现有 MongoDB 实例,将现有的安装包替换为 4.2 版本的安装包后启动 MongoDB
systemctl stop mongodb
mv /usr/local/mongodb /usr/local/mongodb.bak-4.0
cp -r mongodb-linux-x86_64-rhel70-4.2.25 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb
systemctl start mongodb- 拷贝 MongoDB 4.2.25 安装包名称以实际为准
- 启动后可以尝试登录此节点,能登录上基本就正常,如果登录不上需要检查程序状态或者可能是数据量大,磁盘性能太低导致启动过慢
-
两个 SECONDARY 节点升级步骤一致
-
降级 PRIMARY 节点
登录到 MongoDB 主节点,使用
rs.stepDown()
命令降级主节点并强制选举新的主节点/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> rs.stepDown() -
升级旧 PRIMARY 节点,步骤与升级 SECONDARY 节点一致
-
登录 PRIMARY 节点,设置功能兼容性版本为 4.2
/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )- 输出正常包含:
{ "ok" : 1 }
检查各节点状态
> rs.status()
- 正常应为一个 PRIMARY,两个 SECONDARY
查询 featureCompatibilityVersion
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
- 输出包含
{ "featureCompatibilityVersion" : { "version" : "4.2" }, "ok" : 1 }
代表升级到 4.2 版本成功 👏 👏
- 输出正常包含:
从 4.2 升级到 4.4
-
升级副本集的 SECONDARY 节点(一次升级一个 SECONDARY 节点)
停止现有 MongoDB 实例,将现有的安装包替换为 4.4 版本的安装包后启动 MongoDB
systemctl stop mongodb
mv /usr/local/mongodb /usr/local/mongodb.bak-4.2
cp -r mongodb-linux-x86_64-rhel70-4.4.29 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb
systemctl start mongodb- 拷贝 MongoDB 4.4.29 安装包名称以实际为准
- 启动后可以尝试登录此节点,能登录上基本就正常,如果登录不上需要检查程序状态或者可能是数据量大,磁盘性能太低导致启动过慢
-
两个 SECONDARY 节点升级步骤一致
-
降级 PRIMARY 节点
登录到 MongoDB 主节点,使用
rs.stepDown()
命令降级主节点并强制选举新的主节点/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> rs.stepDown() -
升级旧 PRIMARY 节点,步骤与升级 SECONDARY 节点一致
-
登录 PRIMARY 节点,设置功能兼容性版本为 4.4
/usr/local/mongodb/bin/mongo -u root -p 密码 --authenticationDatabase admin
> db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )- 输出正常包含:
{ "ok" : 1 }
检查各节点状态
> rs.status()
- 正常应为一个 PRIMARY,两个 SECONDARY
查询 featureCompatibilityVersion
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
- 输出包含
{ "featureCompatibilityVersion" : { "version" : "4.4" }, "ok" : 1 }
代表升级到 4.4 版本成功 👏 👏
- 输出正常包含: