HAProxy安装与RabbitMQ负载均衡配置

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 次健康检查失败后停止向该服务分发请求。

完整配置可以参考下面的结构,实际服务器中的默认配置可能略有差异,只需要保留原有 globaldefaults 配置,再追加统计页面和 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 表示统计页面访问路径为 /statsstats 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 集群中的多个节点。

相关推荐
jiayong233 小时前
Kafka 高吞吐消息链路常见面试问题及详细解答
分布式·面试·kafka
卷毛迷你猪3 小时前
快速实验篇(A2-2)数据清洗规则修正与多语言实现验证
hadoop·分布式
业精于勤_荒于稀4 小时前
登录鉴权-ai
分布式
Kurisu5754 小时前
深度拆解:从 CAP 定理到 Raft 协议的分布式一致性演进
分布式
开开心心就好5 小时前
小白友好的程序联网封锁实用工具
windows·eureka·计算机外设·rabbitmq·word·excel·csdn开发云
kuokay5 小时前
深入理解 LLM 分布式训练全栈:从硬件到 LLaMA-Factory
分布式·llama·deepspeed·fsdp·llama-factory·accelerate
Java 码思客5 小时前
【Redis分布式缓存实战】第2章 Redis核心数据结构与业务实战场景
redis·分布式·缓存
Rick19936 小时前
Redis 分布式锁 + 部署模式
redis·分布式
phltxy16 小时前
RabbitMQ集群搭——多机多节点与单机多节点
分布式·rabbitmq·ruby