Skip to content

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 status

2. 检查集群状态

bash
# 查看集群状态
rabbitmqctl cluster_status

# 检查分区
rabbitmqctl cluster_status | grep partitions

# 检查告警
rabbitmq-diagnostics check_alarms

3. 备份数据

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 list

5. 通知相关方

  • 通知开发团队升级计划
  • 通知运维团队准备监控
  • 确定维护时间窗口

单节点升级

升级步骤

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 all

Docker 升级

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_pids

Feature 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 rabbit

2. 集群状态检查

bash
# 检查集群状态
rabbitmqctl cluster_status

# 检查节点通信
rabbitmq-diagnostics -n rabbit@node2 check_running

3. 队列检查

bash
# 检查队列数量
rabbitmqctl list_queues name messages consumers

# 检查镜像队列同步
rabbitmqctl list_queues name synchronised_slave_pids

4. 连接检查

bash
# 检查连接数
rabbitmqctl list_connections peer_host user

# 检查通道数
rabbitmqctl list_channels

5. 功能验证

bash
# 测试发布消息
rabbitmqadmin publish routing_key=test payload="test message"

# 测试消费消息
rabbitmqadmin get queue=test

# 测试 API
curl -u guest:guest http://localhost:15672/api/overview

6. 监控检查

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
  • [ ] 监控告警状态

升级后检查

  • [ ] 服务状态正常
  • [ ] 集群状态正常
  • [ ] 队列状态正常
  • [ ] 连接数正常
  • [ ] 消息收发正常
  • [ ] 监控指标正常
  • [ ] 管理界面正常

注意事项

  1. 时间窗口: 选择业务低峰期进行升级
  2. 监控告警: 升级期间加强监控
  3. 文档记录: 记录升级过程和问题
  4. 应急预案: 准备好应急响应方案

相关链接