Linux上实现RabbitMQ高可用
一、总体架构与前提
二、部署步骤
rabbitmq-plugins enable rabbitmq_management;创建管理员用户并开放远程访问(默认 guest 仅本地)。rabbitmqctl stop_app → rabbitmqctl join_cluster --ram rabbit@<master-hostname>(或省略 --ram 为磁盘节点)→ rabbitmqctl start_app;在任一节点执行 rabbitmqctl cluster_status 校验。rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'(按需改为 exactly 与副本数)。x-queue-type=quorum,具备更强的复制一致性与故障恢复能力。三、关键配置与示例
192.168.1.10 rabbit1
192.168.1.11 rabbit2
192.168.1.12 rabbit3
# 全部队列镜像到所有节点,自动同步
rabbitmqctl set_policy ha-all "^" \
'{"ha-mode":"all","ha-sync-mode":"automatic"}'
# 仅复制到2个节点(过半写)
rabbitmqctl set_policy ha-two "^" \
'{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
listen rabbitmq_cluster
bind 0.0.0.0:5672
mode tcp
balance roundrobin
server rabbit1 192.168.1.10:5672 check inter 5000 rise 2 fall 2
server rabbit2 192.168.1.11:5672 check inter 5000 rise 2 fall 2
server rabbit3 192.168.1.12:5672 check inter 5000 rise 2 fall 2
listen stats
bind 0.0.0.0:8100
mode http
stats enable
stats uri /rabbitmq-stats
stats refresh 5s
spring.rabbitmq.addresses=amqp://vip:5672,amqp://rabbit1:5672,amqp://rabbit2:5672;队列/交换机在启动期声明,生产环境优先使用 Quorum 队列(设置 x-queue-type=quorum)。四、验证与运维要点
rabbitmqctl cluster_status(检查 nodes、running_nodes、partitions 为空);管理界面(端口 15672)查看节点与队列分布;HAProxy 统计页(端口 8100)观察后端健康与切换。autoheal 或 pause_minority),并在架构上尽量保证奇数节点与多数派可用,降低分区风险。cluster_status 与业务确认。五、常见陷阱与最佳实践
ha-mode=all,可用 exactly 与副本数(如 N/2+1)平衡可靠性与性能。ha-sync-mode=automatic 与 ha-promote-on-shutdown/ha-promote-on-failure 的取舍。