Appearance
RabbitMQ 版本升级指南
概述
本文档提供 RabbitMQ 版本升级的详细指南,包括升级前准备、升级步骤和升级后验证。
升级原则
基本原则
| 原则 | 说明 |
|---|---|
| 备份优先 | 升级前必须备份配置和数据 |
| 渐进升级 | 跨大版本需按顺序升级 |
| 测试验证 | 生产升级前在测试环境验证 |
| 回滚准备 | 准备好回滚方案 |
版本升级路径
3.8.x → 3.9.x → 3.10.x → 3.11.x → 3.12.x → 3.13.x → 4.0.x
# 跨版本升级必须按顺序进行
# 例如: 3.8.x 不能直接升级到 3.12.x升级前准备
1. 检查当前版本
bash
# 查看当前版本
rabbitmqctl version
# 查看详细状态
rabbitmqctl status2. 检查集群状态
bash
# 查看集群状态
rabbitmqctl cluster_status
# 检查分区
rabbitmqctl cluster_status | grep partitions
# 检查告警
rabbitmq-diagnostics check_alarms3. 备份数据
bash
# 备份配置文件
cp -r /etc/rabbitmq /etc/rabbitmq.backup
# 备份数据目录
cp -r /var/lib/rabbitmq/mnesia /var/lib/rabbitmq/mnesia.backup
# 导出定义
rabbitmqctl export_definitions /backup/definitions.json
# 导出队列消息(可选)
# 使用 Shovel 或应用层导出4. 检查兼容性
bash
# 检查 Feature Flags
rabbitmqctl list_feature_flags
# 检查插件兼容性
rabbitmq-plugins list5. 通知相关方
- 通知开发团队升级计划
- 通知运维团队准备监控
- 确定维护时间窗口
单节点升级
升级步骤
bash
# 1. 停止服务
rabbitmqctl stop_app
# 或
systemctl stop rabbitmq-server
# 2. 备份数据(如果还没备份)
cp -r /var/lib/rabbitmq/mnesia /var/lib/rabbitmq/mnesia.backup
# 3. 升级软件包
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install rabbitmq-server
# CentOS/RHEL
sudo yum update rabbitmq-server
# 或使用包管理器安装指定版本
# sudo apt-get install rabbitmq-server=3.12.0-1
# 4. 启动服务
systemctl start rabbitmq-server
# 5. 检查状态
rabbitmqctl status
# 6. 启用新的 Feature Flags
rabbitmqctl enable_feature_flag allDocker 升级
bash
# 1. 停止容器
docker stop rabbitmq
# 2. 备份数据
docker cp rabbitmq:/var/lib/rabbitmq ./rabbitmq_backup
# 3. 启动新版本容器
docker run -d --name rabbitmq-new \
-v ./rabbitmq_backup:/var/lib/rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
rabbitmq:3.12-management
# 4. 验证
docker exec rabbitmq-new rabbitmqctl status集群滚动升级
升级顺序
升级顺序(推荐):
1. 先升级磁盘节点
2. 再升级内存节点(如果有)
3. 每次只升级一个节点升级步骤
步骤 1: 升级第一个节点
bash
# 在第一个节点上执行
# 1. 停止应用
rabbitmqctl stop_app
# 2. 升级软件包
sudo apt-get update
sudo apt-get install rabbitmq-server
# 3. 启动应用
rabbitmqctl start_app
# 4. 检查状态
rabbitmqctl cluster_status
# 5. 启用 Feature Flags
rabbitmqctl enable_feature_flag all步骤 2: 验证第一个节点
bash
# 检查节点状态
rabbitmqctl status
# 检查集群状态
rabbitmqctl cluster_status
# 检查队列状态
rabbitmqctl list_queues name pid
# 检查告警
rabbitmq-diagnostics check_alarms步骤 3: 升级其他节点
bash
# 在其他节点上重复步骤 1
# 注意:确保前一个节点完全恢复后再升级下一个节点步骤 4: 最终验证
bash
# 在任意节点检查集群状态
rabbitmqctl cluster_status
# 检查所有节点版本
rabbitmqctl status | grep -A 5 "RabbitMQ"
# 检查队列同步状态
rabbitmqctl list_queues name synchronised_slave_pidsFeature Flags 管理
查看功能标志
bash
# 列出所有功能标志
rabbitmqctl list_feature_flags
# 输出示例
# Feature name State
# drop_unroutable_metric enabled
# empty_basic_get_metric enabled
# implicit_default_bindings enabled
# quorum_queue disabled启用功能标志
bash
# 启用单个功能标志
rabbitmqctl enable_feature_flag quorum_queue
# 启用所有功能标志
rabbitmqctl enable_feature_flag all注意事项
- Feature Flags 一旦启用无法回退
- 集群所有节点需启用相同的功能标志
- 升级后应尽快启用新功能标志
升级后验证
1. 服务状态检查
bash
# 检查服务状态
rabbitmqctl status
# 检查监听端口
rabbitmq-diagnostics listeners
# 检查进程状态
ps aux | grep rabbit2. 集群状态检查
bash
# 检查集群状态
rabbitmqctl cluster_status
# 检查节点通信
rabbitmq-diagnostics -n rabbit@node2 check_running3. 队列检查
bash
# 检查队列数量
rabbitmqctl list_queues name messages consumers
# 检查镜像队列同步
rabbitmqctl list_queues name synchronised_slave_pids4. 连接检查
bash
# 检查连接数
rabbitmqctl list_connections peer_host user
# 检查通道数
rabbitmqctl list_channels5. 功能验证
bash
# 测试发布消息
rabbitmqadmin publish routing_key=test payload="test message"
# 测试消费消息
rabbitmqadmin get queue=test
# 测试 API
curl -u guest:guest http://localhost:15672/api/overview6. 监控检查
bash
# 检查 Prometheus 指标
curl http://localhost:15692/metrics
# 检查管理界面
curl -I http://localhost:15672/回滚方案
单节点回滚
bash
# 1. 停止服务
systemctl stop rabbitmq-server
# 2. 卸载新版本
sudo apt-get remove rabbitmq-server
# 3. 安装旧版本
sudo apt-get install rabbitmq-server=3.11.0-1
# 4. 恢复数据
cp -r /var/lib/rabbitmq/mnesia.backup/* /var/lib/rabbitmq/mnesia/
# 5. 启动服务
systemctl start rabbitmq-server集群回滚
bash
# 按升级相反的顺序回滚
# 1. 停止已升级的节点
# 2. 回滚到旧版本
# 3. 恢复数据
# 4. 重启节点
# 5. 验证集群状态常见问题处理
问题 1: 节点无法启动
bash
# 检查日志
tail -f /var/log/rabbitmq/rabbit@hostname.log
# 检查 Erlang Cookie
cat /var/lib/rabbitmq/.erlang.cookie
# 检查权限
ls -la /var/lib/rabbitmq/问题 2: 集群无法同步
bash
# 检查网络连通性
ping node2.example.com
# 检查端口
telnet node2.example.com 25672
# 检查 Erlang Cookie 是否一致
diff /var/lib/rabbitmq/.erlang.cookie /path/to/node2/.erlang.cookie问题 3: 队列不同步
bash
# 手动同步队列
rabbitmqctl sync_queue queue_name
# 检查同步状态
rabbitmqctl list_queues name synchronised_slave_pids问题 4: Feature Flag 错误
bash
# 检查功能标志状态
rabbitmqctl list_feature_flags
# 确保所有节点版本一致
rabbitmqctl cluster_status升级检查清单
升级前检查
- [ ] 确认当前版本
- [ ] 确认目标版本
- [ ] 备份配置文件
- [ ] 备份数据目录
- [ ] 导出定义文件
- [ ] 检查插件兼容性
- [ ] 准备回滚方案
- [ ] 通知相关团队
升级中检查
- [ ] 按顺序升级节点
- [ ] 每个节点升级后验证
- [ ] 启用 Feature Flags
- [ ] 监控告警状态
升级后检查
- [ ] 服务状态正常
- [ ] 集群状态正常
- [ ] 队列状态正常
- [ ] 连接数正常
- [ ] 消息收发正常
- [ ] 监控指标正常
- [ ] 管理界面正常
注意事项
- 时间窗口: 选择业务低峰期进行升级
- 监控告警: 升级期间加强监控
- 文档记录: 记录升级过程和问题
- 应急预案: 准备好应急响应方案
