一、负载均衡
负载均衡(Load Balancing)是通过将网络请求或任务分发到多个服务器节点,实现资源优化、提高系统可用性和处理能力的技术。
分摊负载:避免单节点过载,提升系统整体吞吐量;
高可用性:自动检并隔离故障节点,确保服务持续稳定;
可扩展性:支持动态添加/移除节点,适应业务增长。
二、haproxy简介
haproxy(High Availability Proxy)是一款高性能的 TCP/HTTP 负载均衡器 和 代理服务器,由 Willy Tarreau 开发,主要用于提升服务器集群的可用性、稳定性和吞吐量。
核心功能
负载均衡:支持多种算法(如轮询、加权轮询、IP 哈希、最少连接等),将客户端请求分发到后端服务器,避免单点过载。
高可用性:通过健康检查机制自动剔除故障节点,确保服务持续可用。
SSL/TLS 终止:可卸载后端服务器的 HTTPS 加密/解密工作,提升性能。
HTTP 反向代理:支持 URL 重写、请求过滤、缓存等功能。
TCP 代理:适用于数据库、邮件等非 HTTP 协议的服务负载均衡。
软件信息及配置文件
软件安装包: haproxy-2.4.22-3.el9_3.x86_64.rpm
启动文件: /lib/systemd/system/haproxy.service
主配置目录: /etc/haproxy/
主配置文件: /etc/haproxy/haproxy.cfg
子配置目录: /etc/haproxy/conf.d
典型应用场景
网站服务器集群的负载均衡(如 Nginx 后端的进一步扩展)
数据库读写分离代理(如 MySQL 主从架构)
构建高可用服务架构(结合 Keepalived 实现故障自动切换)
三、haproxy静态算法的生效机制
haproxy的静态算法是一类基于预设规则调度请求的算法,其核心特点是不依赖后端服务器的实时状态(如负载、连接数),且权重调整后需重启HAProxy服务才能生效。
1、静态算法的生效条件
静态算法需在haproxy配置文件(通常为 haproxy.cfg )的 backend 或 listen 段中通过 balance 指令明确指定,配置完成后,需通过 systemctl restart haproxy 或 haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid) 重启服务,算法才能正式生效。
运行时限制:静态算法无法动态调整权重(仅支持权重设为0或1,其他值无效),若需修改服务器权重(如调整 weight 参数),必须重启haproxy服务,否则配置不会生效。
调度逻辑完全基于配置文件中的预设规则(如权重比例、服务器列表顺序),忽略后端服务器的实时负载变化(如CPU使用率、响应时间)。
2、核心算法
静态算法
static-rr:基于权重的轮询调度,不支持运行时动态调整权重(仅支持0和1),不支持后端服务器慢启动,后端主机数量无限制,类似LVS中的wrr。
first:根据服务器在列表中的位置自上而下调度,仅当第一台服务器连接数达上限时,新请求才分配给下一台,忽略权重设置,不支持动态修改权重(设置其他值无效)。
动态算法
roundrobin:基于权重的轮询动态调度,支持权重运行时调整和慢启动,每个后端最多支持4095个真实服务器,是默认调度算法,使用广泛。
leastconn:加权的最少连接动态算法,支持权重运行时调整和慢启动,优先调度至当前连接最少的后端服务器,适合长连接场景(如MySQL)。
可静可动算法(取决于hash_type是否为consistent)
source:基于用户源地址hash转发请求,后续同一源地址请求转发至同一后端服务器。可使用取模法(静态,不支持在线调权和慢启动)或一致性hash(动态,支持在线调权和慢启动)。
uri:对用户请求URI的左半部分或整个URI做hash,再对总权重取模转发,适用于缓存服务器场景,仅支持http模式。可使用取模法(静态)或一致性hash(动态)。
url_param:对URL中params部分指定参数key的value值做hash计算,按服务器总权重派发,多用于电商,无key时按roundrobin算法。可使用取模法(静态)或一致性hash(动态)。
hdr:针对http头部指定信息做hash计算,按服务器总权重取模派发,无有效值时用默认轮询调度。可使用取模法(静态)或一致性hash(动态)。
3、生效验证
日志检查:通过HAProxy日志(默认路径 /var/log/haproxy.log )查看请求分发记录,确认是否符合静态算法的预期规则(如 static-rr 的权重比例、 first 的服务器顺序)。
状态页监控:启用HAProxy状态页(配置 stats enable ),在页面中查看后端服务器的“Requests”指标,验证请求分配是否与静态算法逻辑一致。
四、haproxy的acl
ACL(Access Control List)是HAProxy中用于定义规则的核心功能,通过匹配请求的属性(如IP、域名、URL、请求头、方法等)来执行不同的转发策略或访问控制。
ACL基本语法
定义格式:
acl <acl_name> <criterion> [flags] [operator] <value>
acl_name:自定义ACL名称(区分大小写)
criterion:匹配条件(如 src 匹配客户端IP、 hdr 匹配请求头)
flags/operator:可选参数
value:匹配的值(如IP地址、字符串、正则表达式)。
使用场景:
结合 use_backend (转发至后端)、 http-request (修改请求)、 block (阻止访问)等指令生效。
注意
ACL顺序:先定义的ACL优先匹配,需合理规划顺序。
性能优化:避免过多复杂正则ACL,优先使用前缀匹配( path_beg )、精确匹配( path )等高效条件。
调试建议:通过 haproxy -c -f haproxy.cfg 检查配置语法,或在日志中添加 %[acl(name)] 记录ACL匹配结果。
五、haproxy实验配置
1、环境配置
haproxy |
172.25.254.100 |
RS1 |
172.25.254.10 |
RS2 |
172.25.254.20 |

RS1、RS2安装nginx,关闭火墙









关闭haproxy火墙

2、haproxy的安装及基本信息
haproxy 的配置文件haproxy.cfg由两大部分组成。
global:全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug参数
proxies:代理配置段
defaults:为frontend, backend, listen提供默认配置
frontend:前端,相当于nginx中的server {}
backend:后端,相当于nginx中的upstream {}
listen:同时拥有前端和后端配置,配置简单,生产推荐使用
安装haproxy


/lib/systemd/system/haproxy.service

haproxy -v 查看基本信息

3、haproxy的负载均衡集群

vim /etc/haproxy/haproxy.cfg




注释以上添加以下







4、haproxy的全局配置及参数






proxies配置

