HAproxy负载均衡集群部署
HAproxy负载均衡集群部署
haproxy 负载均衡 LoadBalance LB集群,HAProxy 是一款高性能的 TCP/HTTP 负载均衡器和代理服务器。它广泛应用于高可用性架构中,用于分发流量到多个后端服务器,从而提高系统的可靠性、可用性和性能。
常用的负载均衡:
dns 轮询解析
优点: dns轮询的配置是比较方便的,如果网络扩增,新增的Web服务器只要增加一个公网IP即可。
缺点: 如果某台服务器宕机或更改ip地址,DNS服务器是无法自动获知,仍旧会将访问分配到此服务器或更新前的ip地址。修改DNS记录全部生效一般要1-3小时,甚至更久。超出管理员的管理范围。会出现间歇的问题;如果几台Web服务器之间的硬件配置不同,导致能够承受的压力也是不同的,但是DNS轮询解析目前不能很好的按权重进行分配。
nginx | apache
应用层负载均衡 http ftp mail
在nginx从1.9.0后引入模块ngx_stream_core_module,从此可以支持tcp负载均衡。默认该模块是没有编译的,需要用到编译需添加–with-stream配置参数
负载均衡集群:
四层:lvs, nginx(stream),haproxy(mode tcp)
七层:http: nginx(http, ngx_http_upstream_module), haproxy(mode http)
HAProxy核心工作模式
HAProxy 主要支持两种工作模式:
- 四层负载均衡 (Layer 4):基于 IP 和端口进行转发。性能极高,适用于 TCP 协议(如数据库、SSH、普通 TCP 服务)。
- 七层负载均衡 (Layer 7):基于 HTTP 头部、URL、Cookie 等内容进行转发。功能更丰富,适用于 Web 服务。
HAProxy 常用负载均衡算法
| 算法名称 | 描述 | 适用场景 | 特点 |
|---|---|---|---|
| roundrobin | 轮询算法 | 后端服务器性能相近,请求处理时间大致相同 | 默认算法,支持动态权重调整 |
| static-rr | 静态轮询算法 | 需要严格固定权重比例的场景 | 性能略优,不支持动态权重调整 |
| leastconn | 最少连接数算法 | 后端性能差异大,或请求处理时间长短不一 | 防止某台服务器过载,适合长连接 |
| first | 第一个可用算法 | 希望充分利用某几台高性能服务器,其余备用 | 可能导致负载不均,减少活跃服务器数量 |
| source | 源地址哈希算法 | 需要会话保持,且客户端 IP 相对固定 | 同一客户端总是访问同一后端 |
| uri | URI 哈希算法 | 缓存服务器集群 | 确保同一资源总是被请求到同一台服务器 |
| url_param | URL 参数哈希算法 | 需要根据特定业务参数(如用户 ID)进行会话保持 | 灵活性高,依赖 URL 结构 |
| hdr | HTTP 头哈希算法 | 需要根据 Cookie 或自定义 Header 进行分发 | 常用于基于 Cookie 的会话保持 |
| random | 随机算法 | 测试环境或对负载分布要求不严格 | 分布均匀性不如轮询,实现简单 |
HAProxy 源码部署
安装源码编译所需要的依赖包
1
[root@centos-manager ~]# yum -y install gcc systemd-devel openssl*创建一个haproxy的用户
不允许该用户登录系统且不创建家目录,仅使用该用户编译haproxy1
[root@centos-manager ~]# useradd haproxy -s /sbin/nologin -M上传源码安装包并解压
1
2
3
4[root@centos-manager opt]# tar -zxvf haproxy-3.4-dev6.tar.gz
[root@centos-manager opt]# cd haproxy-3.4-dev6/
[root@centos-manager haproxy-3.4-dev6]# ls
addons BRANCHES CHANGELOG dev examples INSTALL MAINTAINERS README.md scripts SUBVERS VERDATE admin BSDmakefile CONTRIBUTING doc include LICENSE Makefile reg-tests src tests VERSION编译haproxy
1
2
3
4
5# 查看操作系统的内核版本
[root@centos-manager ~]# uname -r
3.10.0-862.el7.x86_64
# 开始编译
[root@centos-manager haproxy-3.4-dev6]# make TARGET=linux3100 USE_OPENSSL=1 ADDLIB=-lz clean all参数 说明 make 调用构建工具进行编译 TARGET=linux3100 指定操作系统内核版本 USE_OPENSSL=1 启用 OpenSSL 支持 ADDLIB=-lz 链接 zlib 库 clean all && make clean 清理之前的编译文件,确保环境干净 安装haproxy
1
2[root@centos-manager haproxy-3.4-dev6]# make install PREFIX=/usr/local/haproxy
[root@centos-manager sbin]# cp -rf /usr/local/haproxy/sbin/haproxy /usr/sbin/将haproxy的可执行程序复制到/usr/sbin/,确保在任何目录下都能执行haproxy的这个命令
查看haproxy的版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25[root@centos-manager sbin]# haproxy -version
HAProxy version 3.4-dev6-fcfabd0d9 2026/03/05 - https://haproxy.org/
Status: development branch - not safe for use in production.
Known bugs: https://github.com/haproxy/haproxy/issues?q=is:issue+is:open
Running on: Linux 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64
[root@centos-manager sbin]# ldd /usr/local/haproxy/sbin/haproxy
linux-vdso.so.1 => (0x00007ffdc21e6000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007f3056745000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f30562e2000)
libz.so.1 => /lib64/libz.so.1 (0x00007f30560cc000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3055cfe000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f3055ab1000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f30557c8000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f30555c4000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f30553a9000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f30551a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f30569b7000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f3054f96000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f3054d92000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f3054b78000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f305495c000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f3054735000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f30544d3000)
使用ldd查看一下是否存在ssl的链接库文件,如果存在的话可以支持ssl集群的负载均衡
创建haproxy的配置文件
1
2[root@centos-manager sbin]# mkdir /etc/haproxy
[root@centos-manager sbin]# touch /etc/haproxy/haproxy.cfg/etc/haproxy 是haproxy默认的主配置文件路径
HAProxy 配置文件
再haproxy.cfg 配置文件中添加以下配置模板,后端服务器IP可以按实际应用IP进行修改。
1 | |
检查配置文件语法:haproxy -c -f /etc/haproxy/haproxy.cfg
启动HAProxy
haproxy 的安装包中自带了启动脚本haproxy.init,将该启动脚本复制到/etc/init.d目录中并赋予执行权限即可。
1 | |
查看haproxy启动状态
1 | |
测试

通过配置haproxy的配置文件可以看到,当前的haproxy一共有两台后端服务器,133和134的80端口。这里需要提前的两台后端服务器中安装一个nginx,并配置80端口访问时的网页。
测试的时候只需要访问 haproxy负载均衡服务器的80端口,就可以负载到两台后端服务器的80端口的服务。
当前负载配置架构图

Haproxy 状态监控
Haproxy 提供了状态监控页面,可以查看后端服务器的请求、响应数量以及状态。访问url:http://IP地址:10000/haproxy。用户名和密码:
