Ubuntu 上升级 RabbitMQ 的完整步骤
一 升级前准备
- 核对当前版本与依赖:执行 rabbitmqctl version、检查 Erlang/OTP 是否满足目标版本要求,列出已启用插件 rabbitmq-plugins list,并查看集群状态 rabbitmqctl cluster_status。
- 兼容性核查:重点确认目标 RabbitMQ 与 Erlang 的版本矩阵(如 4.0.0+ 支持 Erlang 27.x,3.12.0+ 支持 Erlang 26.x),避免跨大版本不兼容。
- 完整备份:导出元数据 rabbitmqctl export_definitions /path/to/definitions.json;备份配置目录 /etc/rabbitmq/ 与数据目录 /var/lib/rabbitmq/;准备回滚方案与维护窗口。
- 升级策略:单机可短暂停机升级;集群建议按节点逐一升级,尽量在业务低峰期执行。
二 使用 APT 原地升级 Ubuntu 上的 RabbitMQ
- 更新索引并查看可用版本:
- sudo apt update
- apt policy rabbitmq-server
- 执行升级(保持现有配置与数据):
- sudo apt install --only-upgrade rabbitmq-server
- 如需指定版本:sudo apt install rabbitmq-server=
- 重启并验证:
- sudo systemctl restart rabbitmq-server
- sudo systemctl status rabbitmq-server
- rabbitmqctl status
- 批量或自动化环境可用官方一键脚本配置 APT 源后执行升级:
- curl -1sLf ‘https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/setup.deb.sh’ | sudo -E bash
- 随后执行 apt update && apt install --only-upgrade rabbitmq-server
三 跨大版本或需要新特性时的仓库切换与重装
- 导入密钥并添加官方 APT 源(以 Ubuntu 22.04 Jammy 为例,其他版本替换为对应代号如 noble/jammy/focal):
- sudo apt-get update && sudo apt-get install -y curl gnupg apt-transport-https
- curl -1sLf “https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA” | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /devref
- sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/jammy jammy main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/jammy jammy main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/jammy jammy main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/jammy jammy main
EOF
- 安装/升级与验证:
- sudo apt update
- sudo apt install -y rabbitmq-server
- sudo systemctl restart rabbitmq-server && sudo systemctl status rabbitmq-server
- rabbitmqctl status
- 如必须回退版本:优先在相同大版本内用 apt install rabbitmq-server= 指定版本;跨大版本降级通常不被支持,可能需要清理数据目录后重装并重新导入定义。
四 集群升级与兼容性要点
- 逐节点升级:在集群中依次对每个节点执行“停止 → 升级 → 启动 → 健康检查”,待所有节点完成升级后再进行业务验证,避免同时重启导致整体不可用。
- 插件与特性:升级后检查 rabbitmq-plugins list,确保所有插件与目标版本兼容;必要时先禁用不兼容插件再逐步启用。
- 元数据存储变更:自 4.2.0 起,新集群默认使用 Khepri 作为元数据存储;现有集群升级后默认仍用 Mnesia,可评估启用 rabbitmqctl enable_feature_flag khepri_db 并观察迁移情况。
- 协议与行为变更:在 4.2.0 起,AMQP 1.0 客户端若省略消息头,durable 默认值改为 false,需显式设置为 true 以避免消息重启后丢失。
- 回滚策略:跨大版本回滚通常不支持且风险高;如确需回退,务必先导出定义,清理 Mnesia 数据目录后再安装旧版本并重新导入定义。
五 升级后验证与常见问题处理
- 基础与服务状态:
- sudo systemctl status rabbitmq-server(应为 active (running))
- rabbitmqctl status 与 rabbitmqctl cluster_status(集群视角)
- 管理界面与连通性:启用管理插件 sudo rabbitmq-plugins enable rabbitmq_management,访问 http://:15672 验证节点与队列状态。
- 定义与权限:如有导出定义,使用管理界面或 CLI 重新导入;按需重建 admin 用户与权限。
- 常见问题速查:
- 升级后插件不可用:用 rabbitmq-plugins disable/enable 调整,确保插件与目标版本匹配。
- 页面指标或节点信息异常:集群全量升级完成并清缓存后再观察。
- 降级失败无法启动:多因数据不兼容,需清理 /var/lib/rabbitmq/mnesia/ 后重装并导入定义。