温馨提示×

CentOS上MongoDB的版本升级流程是怎样的

小樊
36
2025-12-13 12:41:31
栏目: 云计算

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)

  1. 备份与检查
  • mongodump --out /backup/mongo-$(date +%F)
  • 确认 FCV 为当前大版本(如 4.2)。
  1. 配置官方 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
  1. 正常关闭 mongod
  • mongo --eval ‘db.shutdownServer()’
  1. 执行升级
  • 升级到目标大版本的最新小版本:sudo yum update -y mongodb-org
  • 如需固定版本防止误升级,可在升级后使用版本锁定(yum versionlock)或在 repo 中仅保留目标版本。
  1. 启动并验证
  • sudo systemctl start mongod
  • mongod --version 或 mongo --eval ‘db.version()’ 查看版本
  1. 提升特性兼容版本 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 以便维护。

0