从 RabbitMQ 3.8 升级到 3.9 属于跨小版本升级,核心风险集中在 Erlang 版本匹配、插件兼容性以及集群滚动升级时的状态一致性,建议先在测试环境验证插件可用性后再生产操作。
先说结论:升级前必须同步升级 Erlang 环境至 23.2+ 并备份元数据,插件需重新适配新版本,集群环境建议采用滚动升级策略。
- 先准备:备份配置文件与元数据,确认 Erlang 版本兼容性
- 先处理:停止服务后替换插件文件,修复文件权限避免加载失败
- 再验证:检查队列状态与插件加载日志,确认无报错后再切流
1. 核心环境依赖检查
RabbitMQ 3.9 强依赖 Erlang 运行时,版本不匹配会导致服务无法启动。RabbitMQ 3.9 建议搭配 Erlang 23.2 及以上版本,具体请参考官方兼容性矩阵。
# 检查当前 Erlang 版本
erl -version
# 检查当前 RabbitMQ 版本
rabbitmqctl version
2. 数据与配置备份
备份配置文件(/etc/rabbitmq/)与数据目录(/var/lib/rabbitmq/),并导出元数据定义。防止升级失败导致数据丢失。
# 导出元数据备份
rabbitmqctl export_definitions /path/to/definitions.json
# 备份配置与数据目录
cp -r /etc/rabbitmq /etc/rabbitmq.bak
cp -r /var/lib/rabbitmq /var/lib/rabbitmq.bak
3. 执行升级命令
根据操作系统选择包管理工具升级。CentOS 7 需手动安装高版本 Erlang 依赖,或建议采用 Docker 容器化部署以避免环境冲突。
# CentOS/RHEL 示例
yum update rabbitmq-server
# Ubuntu/Debian 示例
apt-get update
apt-get install rabbitmq-server
# 停止与启动服务
systemctl stop rabbitmq-server
systemctl start rabbitmq-server
4. 特性标志与配置迁移
3.x 版本引入特性标志(Feature Flags),升级后需检查并启用新特性。同时检查 rabbitmq.conf 是否有废弃配置项。
# 查看特性标志状态
rabbitmqctl feature_flags list
# 启用所有兼容的特性标志
rabbitmqctl enable_feature_flag all
若使用了延迟消息等第三方插件,需前往插件官方仓库确认支持 3.9 的版本号。升级后插件文件通常需重新复制到插件目录并启用,直接覆盖旧文件可能导致兼容性问题。
# 修复插件文件权限(避免无法加载)
chown -R rabbitmq:rabbitmq /usr/lib/rabbitmq/plugins
# 重新启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
5. 验证与常见坑
查看日志文件(/var/log/rabbitmq/),搜索是否有"failed to load plugin"或"incompatible"错误。登录管理面板,确认队列、交换机状态正常,集群节点指标显示完整。
插件失效:升级后延迟插件常因版本不匹配失效,需下载对应新版本插件文件重新部署。
集群指标缺失:滚动升级期间,管理面板可能无法拉取未升级节点的指标,待所有节点升级完毕并清空浏览器缓存后恢复。
回滚方案:若升级失败,停止服务,恢复备份的数据目录与配置文件,并降级 RabbitMQ 包版本。
参考来源
RabbitMQ Official Documentation - Upgrading RabbitMQ
RabbitMQ Compatibility Matrix (Erlang)