MongoDB在CentOS如何升级
小樊
40
2026-01-02 02:50:26
MongoDB 在 CentOS 的升级指南
一 升级前准备
- 备份数据与环境
- 全量备份:mongodump --out /path/to/backup/$(date +%F)
- 备份配置文件与密钥:/etc/mongod.conf、keyFile、TLS 证书等
- 检查现状
- 查看版本:mongod --version、mongo --version
- 查看服务状态:systemctl status mongod
- 选择目标版本与仓库
- 建议优先选择当前系列的补丁版本(如 4.4.x → 4.4.y),风险最低
- 跨大版本升级需按官方支持路径逐步进行,不能跨多代直接升级
- 规划维护窗口与回滚方案
二 单机升级步骤(YUM 官方仓库)
- 步骤概览
- 备份(见上)
- 创建或更新官方仓库文件(示例为 4.4,如需 6.0 将版本号替换为 6.0)
sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo <<‘EOF’
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF
- 清理缓存并更新
sudo yum clean all
sudo yum update -y mongodb-org
- 重启服务
sudo systemctl restart mongod
- 验证版本
mongod --version
mongo --eval “db.version()”
- 仅升级客户端工具(如仅 mongosh/mongo shell)
- 升级 shell:sudo yum update -y mongodb-org-shell
- 验证:mongo --version
- 说明
- 上述仓库与命令适用于 CentOS 7/8 的 RPM 场景;若使用二进制安装,请改为替换二进制并校验权限与配置。
三 副本集与分片的滚动升级
- 基本原则
- 逐节点维护,始终保持多数节点可用,避免一次性停掉多数派
- 同系列补丁版本升级一般无需额外兼容性操作;跨大版本需按官方路径逐步进行
- 滚动升级示例(以 3 节点副本集为例)
- 连接主节点,降低自身成为主的概率:rs.stepDown()
- 等待主节点切换,原主变为 SECONDARY
- 在待升级节点上执行:
- 停止服务:sudo systemctl stop mongod
- 执行升级(YUM 或替换二进制)
- 启动服务:sudo systemctl start mongod
- 观察日志与复制状态:rs.status(),确认 stateStr: SECONDARY 且复制追平(optime 接近)
- 重复以上步骤升级其余节点
- 所有节点升级完成后,可切回主节点(如需要):rs.stepUp()
- 分片集群
- 先逐个升级 mongos 路由层
- 再逐个升级 config server 副本集
- 最后按上述副本集流程逐个升级各 shard 副本集
- 提示
- 跨大版本升级前务必阅读对应版本的 Release Notes 与兼容性变更;必要时在测试环境演练。
四 回滚与常见问题
- 快速回滚
- YUM 场景:sudo yum downgrade -y mongodb-org-<原版本号>
- 二进制场景:用备份的 bin/ 目录覆盖,恢复 conf/ 与 keyFile,再重启
- 常见问题处理
- 升级后无法启动:检查 /var/log/mongodb/mongod.log 中配置项变更、权限(数据目录属主应为 mongod:mongod)、WiredTiger 版本兼容等
- 命令不存在或版本不一致:确认 PATH、是否只升级了部分组件(如仅升级了 server 未升级 shell)
- 复制/分片异常:使用 rs.status()、sh.status() 定位,必要时回滚到升级前节点再排查
五 版本路径与兼容性要点
- 升级路径
- 大版本之间通常需逐级升级,不可跨多代;例如从 3.2 不能直接到 5.0,需依次经过中间版本
- 补丁版本可在同一大版本内直接升级(如 3.2.4 → 3.2.22)
- 仓库与系统建议
- 选择与系统匹配的官方仓库(如 $releasever),并导入对应 GPG key
- 若使用 CentOS 7,社区常见做法是停留在 4.4.x 系列以获得更好的兼容性;更高版本需评估驱动、库与内核支持情况