备份数据
备份配置文件 /etc/rabbitmq/ 和数据目录 /var/lib/rabbitmq/:
sudo cp -r /etc/rabbitmq /etc/rabbitmq.bak
sudo cp -r /var/lib/rabbitmq /var/lib/rabbitmq.bak
升级步骤(推荐使用 APT)
sudo apt update
sudo apt install --only-upgrade rabbitmq-server
或指定版本:sudo apt install rabbitmq-server=3.9.13-1
sudo systemctl restart rabbitmq-server
验证升级
检查版本:
rabbitmqctl status | grep "RabbitMQ"
查看 Web 管理界面(默认端口 15672)是否正常。
场景 1:元数据迁移(用户、队列、交换机等)
使用 rabbitmqctl 导出/导入配置:
sudo rabbitmqctl export_definitions /tmp/rabbitmq-config.json
sudo rabbitmqctl import_definitions /tmp/rabbitmq-config.json
注意:若主机名变更,需用 sed 替换配置中的旧主机名。场景 2:消息数据迁移(持久化消息)
方案 1:使用 Shovel 插件(推荐)
sudo rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management
/etc/rabbitmq/rabbitmq.conf)中添加 Shovel 规则:shovel my_shovel {
sources = [ { broker: "amqp://source_user:password@旧服务器IP" } ]
destinations = [ { broker: "amqp://target_user:password@新服务器IP" } ]
queue = "队列名"
}
running,待消息迁移完成后切换生产/消费端。方案 2:直接复制数据文件(适用于大规模持久化消息)
sudo systemctl stop rabbitmq-server
/var/lib/rabbitmq/mnesia/ 目录到新服务器:scp -r /var/lib/rabbitmq/mnesia/ 新服务器IP:/var/lib/rabbitmq/
sudo systemctl start rabbitmq-server
注意:此方法需确保新旧服务器的 Erlang 和 RabbitMQ 版本完全一致。
版本兼容性
业务中断控制
测试验证
参考来源: