Linux--haproxy

发布于:2025-08-01 ⋅ 阅读:(10) ⋅ 点赞:(0)

一、负载均衡

负载均衡(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配置