CentOS 上 MongoDB 版本升级流程
一 升级前准备
- 完整备份数据与配置:优先做物理/文件系统级备份(如 LVM 快照、云盘快照),再做逻辑备份(mongodump),确保可回滚。升级前务必停机或确保业务可短暂停写。
- 检查当前版本与特性兼容版本:在 mongo shell 中执行
use admin
db.auth(‘admin’,‘***’)
db.adminCommand({getParameter:1, featureCompatibilityVersion:1})
升级到大版本前,FCV 需保持为“当前大版本”(例如从 4.2→4.4 前,FCV 应为 “4.2”)。
- 升级路径规则:MongoDB 不支持跨多个大版本直接升级,需要按相邻大版本逐级升级(如 4.2→4.4→5.0→6.0)。
- 客户端工具:自 MongoDB 6.0 起不再内置旧的 mongo shell,请准备 mongosh 或使用旧版 shell;升级过程中建议保留可用的旧版 shell 以便回滚验证。
- 变更窗口与回滚预案:明确维护窗口、通知业务、准备回滚到原版本与备份恢复流程。
二 单机版升级步骤(YUM 方式,适用于 CentOS 7/8)
- 备份与检查
- mongodump --out /backup/mongo-$(date +%F)
- 确认 FCV 为当前大版本(如 4.2)。
- 配置官方 YUM 源(示例为 4.4,其他版本替换版本号即可)
- 新建 /etc/yum.repos.d/mongodb-org-4.4.repo,内容:
[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
- 执行:sudo yum clean all
- 正常关闭 mongod
- mongo --eval ‘db.shutdownServer()’
- 执行升级
- 升级到目标大版本的最新小版本:sudo yum update -y mongodb-org
- 如需固定版本防止误升级,可在升级后使用版本锁定(yum versionlock)或在 repo 中仅保留目标版本。
- 启动并验证
- sudo systemctl start mongod
- mongod --version 或 mongo --eval ‘db.version()’ 查看版本
- 提升特性兼容版本 FCV
- 先确保应用与新版本兼容,再在 mongo shell 中执行:
use admin
db.adminCommand({setFeatureCompatibilityVersion:“4.4”})
- 注意:FCV 提升是幂等的,失败可重试;只有在上一个相邻大版本验证无误后再执行。
三 副本集与分片集群升级要点
- 升级顺序:先升级 Config Server 副本集,再逐个升级各 Shard 副本集(每个分片内按先 SECONDARY、后 PRIMARY 的顺序),最后升级所有 mongos。
- 维护期间:在 mongos 上执行 sh.stopBalancer() 暂停均衡;升级完成后重新启用。
- 逐节点操作:每个节点都需“正常关闭 → 升级包 → 启动 → 等待追平 oplog → 验证”后再处理下一个节点,避免一次性全部重启导致不可用。
- FCV 管理:与单机一致,在每个阶段升级完成后、且业务验证通过后再提升对应大版本的 FCV。
四 回滚与常见问题
- 回滚策略:优先用备份恢复;若仅升级了二进制且未提升 FCV,可快速回滚到旧版 RPM 并重启;若已提升 FCV,需先降级 FCV 再回滚,且务必在测试环境验证。
- 常见问题与要点:
- 禁止跨多个大版本升级,必须逐级进行(如 4.2→4.4→5.0)。
- 升级前 FCV 必须保持为“当前大版本”(如 4.2),升级完成并验证后再设置为新版本(如 4.4)。
- 从 4.0→4.2 存在个别内部字段兼容性检查,需提前核查并按官方指引处理(如 local.replset.minvalid 的 oplogDeleteFromPoint 字段),再执行升级。
- 自 6.0 起旧的 mongo shell 不再提供,请使用 mongosh 或保留旧版 shell 以便维护。