核心是确保消息不丢、节点宕机自动接管、客户端无感知;必须同步erlang cookie并设400权限和rabbitmq属主,三节点起步禁用普通集群,优先用quorum queue,客户端需多地址连接并启用自动重连。

搭建 RabbitMQ 集群实现高可用,核心不是“把多个节点连起来”,而是确保消息不丢、节点宕机后服务自动接管、客户端连接无感知。单节点集群或只做元数据同步的普通集群,生产环境等于裸奔。
必须同步 Erlang Cookie 并严格设权限
Erlang Cookie 是集群节点间认证的唯一凭证,所有节点必须完全一致,且权限和属主不能出错:
- 在首个节点生成或确认 cookie 文件:
/var/lib/rabbitmq/.erlang.cookie - 用
scp复制到其他节点对应路径 - 每台机器执行:
chmod 400 /var/lib/rabbitmq/.erlang.cookiechown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie - 时间偏差超过 60 秒也会导致握手失败,需统一校时(如
chronyd)
三节点起步,禁用普通集群模式
普通集群只同步 Exchange、Binding 和队列定义,消息仍只存于声明它的主节点——主节点宕机,队列即不可用,未确认消息永久丢失。
RabbitMQ 4.2.3 是 2026 年初发布的重要稳定更新版本,重点修复了 Khepri 元数据存储相关问题,并改进了监控性能。对于使用 Docker、Kubernetes 或微服务架构的开发团队来说,该版本兼容性和稳定性表现较好。
- 至少部署 3 个节点(推荐 1 个磁盘节点 + 2 个内存节点)
- 所有节点安装相同版本 Erlang 和 RabbitMQ(例如 Erlang 26.2.3 + RabbitMQ 3.13.0)
- 配置
/etc/hosts确保主机名可解析(如192.168.0.12 rabbit-node1) - 停用默认的普通集群行为,直接进入高可用策略配置环节
优先选用仲裁队列(Quorum Queue)
RabbitMQ 3.8+ 推荐生产环境使用 Quorum Queue,它基于 Raft 协议,比传统镜像队列更可靠:
- 消息在多数节点上持久化,容忍 (N−1)/2 个节点故障
- 自动选主、强一致性、支持自动故障恢复
- 创建队列时显式指定:
quorum类型(Spring Boot 中通过QueueBuilder.quorum()) - 避免混用经典镜像队列(
ha-mode: all),该模式已被官方标记为弃用
客户端与网络层必须配合
集群本身不提供 VIP 或自动重连,靠客户端和基础设施兜底:
- 应用连接字符串应包含全部节点地址,如:
amqp://user:pass@rabbit-node1:5672,amqp://user:pass@rabbit-node2:5672 - 启用客户端自动重连与拓扑恢复(如 Spring AMQP 的
automatic-recovery-enabled=true) - 前置负载均衡器(如 HAProxy)需健康检查端口 25672(Erlang 节点通信)和 5672(AMQP),并配置 failover 策略
- 防火墙必须放行:4369(epmd)、25672(节点间通信)、5672(AMQP)、15672(管理界面)










