HAProxy 安装与 RabbitMQ 负载均衡配置
HAProxy 是一款常用的高性能负载均衡软件,适合放在 RabbitMQ 集群前面,为 Producer 和 Consumer 提供统一的访问入口。下面以 RabbitMQ 多节点为例,记录在 Ubuntu 和 CentOS 环境中安装、配置、启动以及查看 HAProxy 管理页面的完整流程。
Ubuntu 环境安装 HAProxy
先更新软件包索引:
bash
sudo apt-get update
如果需要确认软件源中是否存在 HAProxy,可以先执行查询:
bash
sudo apt list | grep haproxy
然后安装 HAProxy:
bash
sudo apt-get install haproxy
验证 Ubuntu 环境中的 HAProxy
安装完成后,可以通过 systemd 查看服务状态:
bash
sudo systemctl status haproxy
如果看到 active (running),说明 HAProxy 服务已经正常运行。也可以查看当前安装的版本:
bash
haproxy -v
如果希望服务器启动后自动拉起 HAProxy,可以设置开机自启:
bash
sudo systemctl enable haproxy
常见的状态输出大致如下:
text
haproxy.service - HAProxy Load Balancer
Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
Active: active (running)
Main PID: 45480 (haproxy)
版本输出示例:
text
HAProxy version 2.4.24-0ubuntu0.22.04.1
Running on: Linux 5.15.0-60-generic x86_64
修改 Ubuntu 环境中的 HAProxy 配置
打开 HAProxy 配置文件:
bash
vim /etc/haproxy/haproxy.cfg
在文件末尾追加如下配置:
haproxy
# haproxy web 管理界面
listen stats
bind *:8100
mode http
stats enable
stats realm Haproxy\ Statistics
stats uri /
stats auth admin:admin
# 配置负载均衡
listen rabbitmq
bind *:5670
mode tcp
balance roundrobin
server rabbitmq1 127.0.0.1:5672 check inter 5000 rise 2 fall 3
server rabbitmq2 127.0.0.1:5673 check inter 5000 rise 2 fall 3
server rabbitmq3 127.0.0.1:5674 check inter 5000 rise 2 fall 3
listen stats 用来开启 HAProxy 的统计信息页面,可以通过浏览器查看当前连接数、活动会话、流量以及后端服务状态等运行数据。
其中几个关键配置含义如下:
haproxy
listen stats
bind *:8100
mode http
stats enable
stats realm Haproxy\ Statistics
stats uri /
stats auth admin:admin
bind *:8100 表示统计页面监听 8100 端口;mode http 表示使用 HTTP 模式;stats enable 表示启用统计页面;stats uri / 表示访问根路径即可进入页面;stats auth admin:admin 表示登录账号和密码均为 admin。
RabbitMQ 负载均衡配置如下:
haproxy
listen rabbitmq
bind *:5670
mode tcp
balance roundrobin
server rabbitmq1 127.0.0.1:5672 check inter 5000 rise 2 fall 3
server rabbitmq2 127.0.0.1:5673 check inter 5000 rise 2 fall 3
server rabbitmq3 127.0.0.1:5674 check inter 5000 rise 2 fall 3
bind *:5670 是 RabbitMQ 集群对外暴露的前端端口。由于 RabbitMQ 默认使用 5672,这里选择 5670 作为统一入口,Producer 和 Consumer 连接这个端口即可。
mode tcp 表示使用 TCP 模式。RabbitMQ 使用的 AMQP 协议基于 TCP,因此这里不能使用普通 HTTP 模式。
balance roundrobin 表示使用轮询策略,把请求依次分发到后端 RabbitMQ 节点。
后端服务配置示例:
haproxy
server rabbitmq1 127.0.0.1:5672 check inter 5000 rise 2 fall 3
rabbitmq1 是 HAProxy 内部使用的服务标识,不是 RabbitMQ 节点名称;127.0.0.1:5672 是真实 RabbitMQ 服务地址;check inter 5000 表示每隔 5000 毫秒检查一次服务是否可用;rise 2 表示故障后连续 2 次健康检查通过才重新标记为可用;fall 3 表示连续 3 次健康检查失败后停止向该服务分发请求。
完整配置可以参考下面的结构,实际服务器中的默认配置可能略有差异,只需要保留原有 global 和 defaults 配置,再追加统计页面和 RabbitMQ 监听配置即可:
haproxy
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
# haproxy web 管理界面
listen stats
bind *:8100
mode http
stats enable
stats realm Haproxy\ Statistics
stats uri /
stats auth admin:admin
# 配置负载均衡
listen rabbitmq
bind *:5670
mode tcp
balance roundrobin
server rabbitmq1 127.0.0.1:5672 check inter 5000 rise 2 fall 3
server rabbitmq2 127.0.0.1:5673 check inter 5000 rise 2 fall 3
server rabbitmq3 127.0.0.1:5674 check inter 5000 rise 2 fall 3
重启并访问 Ubuntu 环境中的 HAProxy
配置保存后重启 HAProxy:
bash
sudo systemctl restart haproxy
然后在浏览器中访问统计页面:
text
http://124.71.229.73:8100/
登录后可以看到 RabbitMQ 集群节点状态。实际访问时需要把示例 IP 替换成自己的服务器 IP。
CentOS 环境安装 HAProxy
CentOS 中可以直接使用 yum 安装:
bash
yum -y install haproxy
安装完成后,终端通常会出现类似输出:
text
Installing:
haproxy x86_64 1.5.18-9.el7_9.1 updates
Installed:
haproxy.x86_64 0:1.5.18-9.el7_9.1
Complete!
修改 CentOS 环境中的 HAProxy 配置
打开配置文件:
bash
vim /etc/haproxy/haproxy.cfg
添加 RabbitMQ 负载均衡和 HAProxy 监控页面配置:
haproxy
listen rabbitmq_local_cluster 0.0.0.0:5670
mode tcp
balance roundrobin
server rabbit1 43.143.223.50:5672 check inter 5000 rise 2 fall 3
server rabbit3 43.143.223.50:5673 check inter 5000 rise 2 fall 3
server rabbit4 43.143.223.50:5674 check inter 5000 rise 2 fall 3
listen private_monitoring :8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 5s
listen rabbitmq_local_cluster 0.0.0.0:5670 表示监听 5670 端口,作为 RabbitMQ 集群统一入口。Producer 和 Consumer 连接这个端口后,请求会由 HAProxy 分发到后端 RabbitMQ 节点。
mode tcp 表示 TCP 负载均衡;balance roundrobin 表示使用轮询算法;server rabbit1 43.143.223.50:5672 check inter 5000 rise 2 fall 3 表示后端 RabbitMQ 节点地址及健康检查规则。
监控页面配置如下:
haproxy
listen private_monitoring :8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 60s
stats uri /stats 表示统计页面访问路径为 /stats;stats refresh 60s 表示页面每 60 秒刷新一次。刷新时间可以根据实际需要调整。
启动并访问 CentOS 环境中的 HAProxy
启动 HAProxy:
bash
systemctl start haproxy
浏览器访问统计页面:
text
http://43.143.223.50:8100/stats
页面打开后,可以看到 RabbitMQ 后端节点的运行状态、健康检查结果以及负载均衡信息。实际使用时,同样需要把示例 IP 替换为自己的服务器 IP。
常见检查点
如果访问不到统计页面,可以检查服务器安全组和防火墙是否放行 8100 端口。
如果 Producer 或 Consumer 无法连接 RabbitMQ 集群入口,可以检查 5670 端口是否放行,以及后端 RabbitMQ 节点端口是否正确。
如果后端节点一直显示不可用,可以分别检查 RabbitMQ 服务是否启动、IP 和端口是否写对、HAProxy 与 RabbitMQ 节点之间网络是否互通。
完成以上配置后,应用程序只需要连接 HAProxy 暴露的统一入口,就可以通过轮询方式访问 RabbitMQ 集群中的多个节点。