rabbitmq在centos上的高可用性怎么实现
导读:在 CentOS 上实现 RabbitMQ 高可用 一、总体架构 采用 3 台 RabbitMQ 节点组成集群,至少包含 1 个磁盘节点(建议全部为磁盘节点以降低复杂度),队列通过 镜像队列实现多副本,保证单节点故障不影响可用性。 在集群...
在 CentOS 上实现 RabbitMQ 高可用
一、总体架构
- 采用 3 台 RabbitMQ 节点组成集群,至少包含 1 个磁盘节点(建议全部为磁盘节点以降低复杂度),队列通过 镜像队列实现多副本,保证单节点故障不影响可用性。
- 在集群前部署 HAProxy 做 TCP 四层负载均衡(5672)与健康检查,客户端不直接连节点。
- 使用 Keepalived 为 HAProxy 提供 VIP(虚拟 IP) 与故障漂移,消除入口单点。
- 管理与监控通过 **管理插件(15672)**与 HAProxy 统计页面完成。
- 典型端口:5672(AMQP)、15672(管理)、8100(HAProxy 统计)。
二、部署步骤
-
准备与基础配置
- 三台主机配置 /etc/hosts 可互相解析主机名;安装 Erlang 与 RabbitMQ(版本需匹配);启动服务并启用管理插件:
- 启用管理:
rabbitmq-plugins enable rabbitmq_management - 访问控制台:
http://< 节点IP> :15672
- 启用管理:
- 同步 Erlang Cookie(同一集群必须一致):
- 常见路径:
/var/lib/rabbitmq/.erlang.cookie或$HOME/.erlang.cookie - 建议权限:
chmod 600,并使用scp同步到所有节点。
- 常见路径:
- 三台主机配置 /etc/hosts 可互相解析主机名;安装 Erlang 与 RabbitMQ(版本需匹配);启动服务并启用管理插件:
-
组建 RabbitMQ 集群
- 选择一台为基准节点(如 rabbit@node1),另外两台执行:
rabbitmqctl stop_app- (可选)
rabbitmqctl reset(清空本节点历史资源) rabbitmqctl join_cluster rabbit@node1(如需内存节点加--ram)rabbitmqctl start_app
- 任意节点查看状态:
rabbitmqctl cluster_status,确认 disc 节点列表与 running_nodes 正常。
- 选择一台为基准节点(如 rabbit@node1),另外两台执行:
-
配置镜像队列
- 全量镜像(适合小规模,3 节点):
rabbitmqctl set_policy ha-all "^" '{ "ha-mode":"all"} '
- 过半写策略(适合更大集群,如 5 节点同步到 3 个副本):
rabbitmqctl set_policy ha-two "^" '{ "ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"} '
- 说明:镜像队列会将队列与消息复制到多个节点,提升可用性,但会带来 网络与磁盘 IO 开销。
- 全量镜像(适合小规模,3 节点):
-
部署 HAProxy
- 建议版本 ≥ 1.6,配置示例(/etc/haproxy/haproxy.cfg):
- 全局与默认
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 - RabbitMQ AMQP 监听(TCP 四层)
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。
- 建议版本 ≥ 1.6,配置示例(/etc/haproxy/haproxy.cfg):
-
部署 Keepalived 实现 VIP 漂移
- 两台 HAProxy 节点安装 Keepalived,配置 VRRP 与 健康检查脚本(检测 HAProxy 进程/端口),主节点
state MASTER、备节点state BACKUP,设置 virtual_router_id 一致、priority 主高备低,并配置 virtual_ipaddress(如 192.168.1.160)。 - 应用通过 VIP:5672 访问,实现入口高可用。
- 两台 HAProxy 节点安装 Keepalived,配置 VRRP 与 健康检查脚本(检测 HAProxy 进程/端口),主节点
三、防火墙与网络
- 放通必要端口(以 firewalld 为例):
firewall-cmd --add-port=5672/tcp --permanentfirewall-cmd --add-port=15672/tcp --permanentfirewall-cmd --reload
- 集群节点间需能互相访问 4369(epmd)、25672(集群通信) 等端口;生产环境建议 内网隔离 与 安全组白名单。
四、验证与运维要点
- 验证集群:
rabbitmqctl cluster_status应显示 3 个节点且 running_nodes 正常;管理界面可查看节点与队列分布。 - 验证高可用:
- 在控制台创建队列并观察 镜像副本数;
- 停掉主镜像或某节点,确认队列仍可用、消息不丢失;
- 通过 VIP:8100/rabbitmq-stats 查看后端节点健康与切换。
- 扩缩容与下线:
- 新增节点:先加入集群,再按需设置镜像策略;
- 下线节点:先
rabbitmqctl stop,再在其他节点执行rabbitmqctl forget_cluster_node < node>;若节点无法启动,可使用forget_cluster_node < node> -offline强制剔除。
五、注意事项与优化
- 节点角色:集群至少 1 个磁盘节点,建议 全部磁盘节点 以避免元数据与队列创建受限。
- 镜像策略:
- 小规模(3 节点)可用
ha-mode: all; - 更大集群建议
ha-mode: exactly+ 过半写(如 N/2+1),并开启ha-sync-mode: automatic提升故障切换后的同步效率。
- 小规模(3 节点)可用
- 性能权衡:镜像队列会显著增加 网络带宽与磁盘 IO,需结合业务吞吐与一致性要求选择策略。
- 客户端连接:生产建议使用 VIP:5672 与连接重试/重连机制,避免直连单节点。
- 版本匹配:部署前务必核对 Erlang 与 RabbitMQ 版本兼容矩阵,避免启动或集群异常。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: rabbitmq在centos上的高可用性怎么实现
本文地址: https://pptw.com/jishu/769931.html
