温馨提示×

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 官方仓库)

  • 步骤概览
    1. 备份(见上)
    2. 创建或更新官方仓库文件(示例为 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
    3. 清理缓存并更新 sudo yum clean all sudo yum update -y mongodb-org
    4. 重启服务 sudo systemctl restart mongod
    5. 验证版本 mongod --version mongo --eval “db.version()”
  • 仅升级客户端工具(如仅 mongosh/mongo shell)
    • 升级 shell:sudo yum update -y mongodb-org-shell
    • 验证:mongo --version
  • 说明
    • 上述仓库与命令适用于 CentOS 7/8 的 RPM 场景;若使用二进制安装,请改为替换二进制并校验权限与配置。

三 副本集与分片的滚动升级

  • 基本原则
    • 逐节点维护,始终保持多数节点可用,避免一次性停掉多数派
    • 同系列补丁版本升级一般无需额外兼容性操作;跨大版本需按官方路径逐步进行
  • 滚动升级示例(以 3 节点副本集为例)
    1. 连接主节点,降低自身成为主的概率:rs.stepDown()
    2. 等待主节点切换,原主变为 SECONDARY
    3. 在待升级节点上执行:
      • 停止服务:sudo systemctl stop mongod
      • 执行升级(YUM 或替换二进制)
      • 启动服务:sudo systemctl start mongod
      • 观察日志与复制状态:rs.status(),确认 stateStr: SECONDARY 且复制追平(optime 接近)
    4. 重复以上步骤升级其余节点
    5. 所有节点升级完成后,可切回主节点(如需要):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 系列以获得更好的兼容性;更高版本需评估驱动、库与内核支持情况

0