备份数据与配置
升级前必须备份RabbitMQ的关键数据(队列、交换机、绑定关系、用户权限等)和配置文件,避免升级失败导致数据丢失。
# 停止RabbitMQ服务
sudo systemctl stop rabbitmq-server
# 备份数据目录(默认路径:/var/lib/rabbitmq)
sudo cp -a /var/lib/rabbitmq /var/lib/rabbitmq-backup
# 备份配置文件(默认路径:/etc/rabbitmq)
sudo cp -a /etc/rabbitmq /etc/rabbitmq-backup
检查Erlang版本兼容性
RabbitMQ对Erlang/OTP版本有严格要求(如RabbitMQ 3.11.x需Erlang 23+,RabbitMQ 4.0+需Erlang 26+)。可通过以下命令查看当前Erlang版本:
erl -eval 'erlang:display(erlang:system_info(otp_release)), halt()' -noshell
若版本不兼容,需先升级Erlang(参考RabbitMQ官方Erlang版本要求)。
检查插件与客户端兼容性
确认当前使用的插件(如rabbitmq_management、rabbitmq_federation)是否支持目标版本,避免升级后插件失效。同时,检查Java/Python等客户端库是否与新版本兼容(如Spring AMQP 2.5+支持RabbitMQ 4.0+)。
若旧版本是通过RPM包安装的,可先卸载以避免冲突:
sudo yum remove -y rabbitmq-server erlang* # 卸载RabbitMQ及Erlang
根据RabbitMQ版本要求,下载并安装对应Erlang RPM包(以Erlang 23为例):
# 添加Erlang官方YUM仓库
sudo tee /etc/yum.repos.d/rabbitmq-erlang.repo <<EOF
[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/\$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOF
# 安装Erlang
sudo yum install -y erlang
# 验证安装
erl -version # 应输出Erlang 23.x版本
从RabbitMQ官方下载页面获取CentOS对应的RPM包(如RabbitMQ 3.11.5):
# 下载RabbitMQ RPM包(以3.11.5为例)
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.11.5/rabbitmq-server-3.11.5-1.el7.noarch.rpm
# 安装RabbitMQ
sudo rpm -ivh rabbitmq-server-3.11.5-1.el7.noarch.rpm
若升级前未卸载旧版本,需清理旧版RabbitMQ的残留数据(注意:此操作会删除所有队列、交换机等数据,仅在确认备份完整后执行):
sudo rm -rf /var/lib/rabbitmq/mnesia/*
# 启动服务
sudo systemctl start rabbitmq-server
# 设置开机自启
sudo systemctl enable rabbitmq-server
# 检查服务状态
sudo systemctl status rabbitmq-server
# 查看RabbitMQ版本(确认升级成功)
sudo rabbitmqctl status | grep -i "version"
滚动升级(推荐)
集群环境下,需逐个节点进行升级,确保集群高可用:
rabbitmqctl stop);rabbitmqctl start_app);集群兼容性要求
集群中所有节点的RabbitMQ版本需在官方兼容矩阵允许范围内(如3.8.x节点可与3.9.x节点共存,但3.8.x节点无法加入4.0+集群)。
检查集群状态
sudo rabbitmqctl cluster_status
确认所有节点已加入集群,且状态为running。
测试消息生产消费
使用生产者发送测试消息,消费者接收消息,验证消息是否正常流转(确保delivery_mode=2(持久化)和auto_ack=false(手动ACK)已配置,避免消息丢失)。
验证插件功能
确保rabbitmq_management等插件已启用(rabbitmq-plugins list),并通过浏览器访问http://<服务器IP>:15672(默认端口15672)登录管理界面,检查队列、用户、权限等配置是否正常。
rabbitmqctl import_definitions /path/to/backup.json)。通过以上步骤,可在CentOS环境下安全升级RabbitMQ版本,确保数据完整性和服务连续性。升级前务必做好备份,并在低峰期执行操作,降低风险。