RabbitMQ在Ubuntu上的负载均衡
导读:Ubuntu 上 RabbitMQ 的负载均衡实践 一 架构与前置条件 建议采用“RabbitMQ 集群 + 负载均衡器”的架构:集群提供容量与冗余,负载均衡器对外提供统一的 AMQP 5672 入口与健康检查。 节点命名必须唯一,常见形...
Ubuntu 上 RabbitMQ 的负载均衡实践
一 架构与前置条件
- 建议采用“RabbitMQ 集群 + 负载均衡器”的架构:集群提供容量与冗余,负载均衡器对外提供统一的 AMQP 5672 入口与健康检查。
- 节点命名必须唯一,常见形式为 rabbit@< 主机名> ;同一主机多实例需通过环境变量设置不同的 RABBITMQ_NODE_PORT 与 RABBITMQ_NODENAME,避免端口冲突。
- 多机部署需保证各节点 Erlang Cookie 一致(权限建议 400,属主 rabbitmq:rabbitmq),并正确配置 /etc/hosts 或 DNS 解析,以便节点互通。
二 快速搭建集群与必要检查
- 单机三节点示例(便于本地验证,端口分别为 5672/5673/5674,管理端口 15672/15673/15674):
- 启动节点
- RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS=“-rabbitmq_management listener [{ port,15672} ]” RABBITMQ_NODENAME=rabbit rabbitmq-server -detached
- RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS=“-rabbitmq_management listener [{ port,15673} ]” RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached
- RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS=“-rabbitmq_management listener [{ port,15674} ]” RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
- 查看状态
- rabbitmqctl status
- rabbitmqctl -n rabbit1 status
- rabbitmqctl -n rabbit2 status
- 组建集群(示例将 rabbit1、rabbit2 加入 rabbit)
- rabbitmqctl -n rabbit1 stop_app
- rabbitmqctl -n rabbit1 reset
- rabbitmqctl -n rabbit1 join_cluster rabbit@< 你的主机名>
- rabbitmqctl -n rabbit1 start_app
- rabbitmqctl -n rabbit2 stop_app
- rabbitmqctl -n rabbit2 reset
- rabbitmqctl -n rabbit2 join_cluster rabbit@< 你的主机名>
- rabbitmqctl -n rabbit2 start_app
- 验证
- rabbitmqctl cluster_status
- 启动节点
- 多机部署要点
- 同步 Erlang Cookie、配置 /etc/hosts、确保 4369(epmd)、25672(集群分发)等端口放通,再按上述 join_cluster 步骤组建集群。
三 使用 HAProxy 进行负载均衡
- 安装与启用
- sudo apt-get update & & sudo apt-get install haproxy
- sudo systemctl enable --now haproxy(安装后通常已自动启动)
- 配置示例(/etc/haproxy/haproxy.cfg)
- 统计页面
- listen stats
- bind *:8100
- mode http
- stats enable
- stats realm Haproxy\ Statistics
- stats uri /
- stats auth admin:admin
- listen stats
- AMQP 负载均衡(TCP 转发,轮询,健康检查)
- listen rabbitmq
- bind *:5670
- mode tcp
- balance roundrobin
- server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 3
- server rabbit2 127.0.0.1:5673 check inter 5000 rise 2 fall 3
- server rabbit3 127.0.0.1:5674 check inter 5000 rise 2 fall 3
- listen rabbitmq
- 统计页面
- 应用与验证
- sudo systemctl restart haproxy
- 客户端连接 5670 端口即可被轮询分发到后端节点;访问 http://< 负载均衡器IP> :8100/ 查看状态与健康检查情况。
四 高可用与队列镜像
- 在仅“集群”形态下,队列默认只存在于创建它的节点,其他节点故障会导致不可达。为提升可用性,配置队列镜像(策略示例):
- rabbitmqctl set_policy ha-all “^” ‘{ “ha-mode”:“all”,“ha-sync-mode”:“automatic”} ’
- 说明:上述策略会对匹配 ^ 的所有队列做全量镜像,生产环境可按需调整匹配规则与策略名称,以平衡一致性与性能。
五 生产注意事项与常见问题
- 单点防护:单个 HAProxy 仍可能成为单点,建议部署 Keepalived + VIP 或多实例 HAProxy 做主备/集群。
- 节点类型:集群中应保证至少一个 磁盘节点(disc),通常将 RAM 节点 与 disc 节点 混合部署;节点类型可在停机后通过 rabbitmqctl change_cluster_node_type 调整。
- 用户与权限:远程访问管理界面需创建管理员用户(默认 guest/guest 仅本地可登录),并为应用分配最小权限的专用账户。
- 端口与连通性:放通 5672(AMQP)、15672(管理)、4369/25672(集群/分发)及负载均衡器与健康检查端口;多机环境优先使用主机名或内网 IP,避免依赖 localhost。
- 健康检查与观察:HAProxy 的 inter/rise/fall 参数可调节探测频率与恢复条件;结合 /stats 页面与 rabbitmqctl cluster_status 持续观察节点与队列状态。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: RabbitMQ在Ubuntu上的负载均衡
本文地址: https://pptw.com/jishu/762272.html
