在 CentOS 上实现 RabbitMQ 高可用
一、总体架构
二、部署步骤
准备与基础配置
rabbitmq-plugins enable rabbitmq_managementhttp://<节点IP>:15672/var/lib/rabbitmq/.erlang.cookie 或 $HOME/.erlang.cookiechmod 600,并使用 scp 同步到所有节点。组建 RabbitMQ 集群
rabbitmqctl stop_apprabbitmqctl reset(清空本节点历史资源)rabbitmqctl join_cluster rabbit@node1(如需内存节点加 --ram)rabbitmqctl start_apprabbitmqctl cluster_status,确认 disc 节点列表与 running_nodes 正常。配置镜像队列
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'rabbitmqctl set_policy ha-two "^" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}'部署 HAProxy
global
log 127.0.0.1 local0 info
maxconn 5120
daemon
defaults
log global
mode tcp
option tcplog
retries 3
timeout connect 10s
timeout client 10s
timeout server 15s
listen rabbitmq_cluster
bind 0.0.0.0:5672
mode tcp
balance roundrobin
server mq1 192.168.1.101:5672 check inter 5000 rise 2 fall 2
server mq2 192.168.1.102:5672 check inter 5000 rise 2 fall 2
server mq3 192.168.1.103: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
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg。部署 Keepalived 实现 VIP 漂移
state MASTER、备节点 state BACKUP,设置 virtual_router_id 一致、priority 主高备低,并配置 virtual_ipaddress(如 192.168.1.160)。三、防火墙与网络
firewall-cmd --add-port=5672/tcp --permanentfirewall-cmd --add-port=15672/tcp --permanentfirewall-cmd --reload四、验证与运维要点
rabbitmqctl cluster_status 应显示 3 个节点且 running_nodes 正常;管理界面可查看节点与队列分布。rabbitmqctl stop,再在其他节点执行 rabbitmqctl forget_cluster_node <node>;若节点无法启动,可使用 forget_cluster_node <node> -offline 强制剔除。五、注意事项与优化
ha-mode: all;ha-mode: exactly + 过半写(如 N/2+1),并开启 ha-sync-mode: automatic 提升故障切换后的同步效率。