一、 核心定位与优势
- 技术定位 :一款提供高可用性、高并发的 四层 (TCP) / 七层 (HTTP) 反向代理服务器。
- 核心架构:单进程、事件驱动模型,内存占用极低,处理并发能力极强。
- 与竞品差异 :相比 Nginx,HAProxy 的七层调度算法更丰富 、健康检查更强大 ;相比 LVS,HAProxy 具备应用层解析能力。
二、 核心工作模式
HAProxy 通过mode指令切换工作模式,核心区别在于是否解析应用层数据:
- mode tcp(四层模式,默认)
- 工作方式:纯 TCP 端口转发,不解析 HTTP 内容。
- 适用场景:MySQL、Redis、SSH、HTTPS 直通(SSL Pass-through)。
- mode http(七层模式)
- 工作方式:解析 HTTP 请求头、URL、Cookie 等内容。
- 适用场景:Web 网站、REST API、需要基于内容分流的业务。
- mode health(健康检查模式)
- 工作方式:仅用于健康检查,不处理实际业务流量。
三、 核心调度算法(生产选型指南)
算法分为静态 (不考虑后端负载)和动态(考虑后端负载)两类,核心选型如下:
1. 静态算法(基于预设规则)
- roundrobin :加权轮询。默认首选,适合短连接服务,支持权重调整。
- source:源 IP 哈希。将同一客户端 IP 固定调度到同一后端,实现会话粘性,适合无状态服务。
- uri:请求 URI 哈希。将同一 URL 调度到同一后端,适合缓存服务器(如 Nginx 静态缓存)。
2. 动态算法(基于实时状态)
- leastconn :最少连接数。适合长连接(如数据库、WebSocket),优先调度连接数最少的节点。
- first:优先调度。优先将请求发送给权重最高且尚未达到连接上限的服务器。
四、 配置文件核心结构(三段式)
HAProxy 的配置必须遵循Global -> Defaults -> Frontend/Backend的顺序,结构严谨:
1. Global(全局配置)
- 作用:配置进程级别的参数,生效于整个 HAProxy 实例。
- 核心指令 :
maxconn:设置最大并发连接数。daemon:以守护进程方式在后台运行。log:定义日志输出的位置和级别。
2. Defaults(默认配置)
- 作用:为后续的 Frontend 和 Backend 提供默认模板,减少重复代码。
- 核心指令 :
mode http/tcp:设定默认的工作模式。timeout connect:HAProxy 连接到后端服务器的超时时间。timeout server:后端服务器响应的超时时间。timeout client:客户端与 HAProxy 的连接超时时间。
3. Frontend(前端) + Backend(后端)
- Frontend(前端) :
- 定义监听端口(
bind *:80)。 - 接收客户端请求。
- 基于 ACL 规则进行流量匹配和分流。
- 定义监听端口(
- Backend(后端) :
- 定义后端服务器池(
server指令)。 - 指定调度算法(
balance指令)。 - 配置健康检查和会话保持。
- 定义后端服务器池(
五、 核心功能配置要点(运维必知)
1. 健康检查(Health Check)
健康检查分为四层基础检查和七层深度检查:
- 四层检查:默认开启,仅检测后端端口是否处于监听状态。
- 七层 HTTP 检查 :需手动配置,检测应用层状态。
- 核心指令:
option httpchk GET /health(指定检查接口)。 - 结果校验:
http-check expect status 200(期望返回 200 状态码)。
- 核心指令:
2. 会话保持(Sticky Sessions)
用于解决分布式系统中的会话一致性问题:
- 基于 Cookie(推荐) :由 HAProxy 插入 Cookie 标记后端服务器。
- 核心指令:
cookie SERVERID insert indirect nocache。
- 核心指令:
- 基于源 IP :即使用
balance source算法,简单但在 NAT 环境下可能导致负载不均。
3. 访问控制(ACL)
HAProxy 的灵魂功能,用于实现复杂的流量路由:
- 核心逻辑 :先定义 ACL 规则,再使用
use_backend指令执行动作。 - 典型场景指令 :
- 域名分流 :
acl is_www hdr(host) -i www.example.com。 - URL 分流 :
acl is_static path_beg /static /images。 - IP 黑白名单 :
acl is_deny src 192.168.1.100。
- 域名分流 :
4. 统计监控页面(Stats)
HAProxy 内置了强大的可视化监控页面,无需额外插件:
- 核心指令 :
stats enable:开启统计功能。stats uri /haproxy-stats:定义访问路径。stats auth admin:123456:设置访问的账号密码。
六、 核心运维命令
所有命令均需指定配置文件,生产环境操作必须严谨:
- 配置检查 (启动前必做):
haproxy -c -f /etc/haproxy/haproxy.cfg - 启动服务 :
haproxy -f /etc/haproxy/haproxy.cfg - 平滑重启 (生产更新配置必用,无停机):
haproxy -f /etc/haproxy/haproxy.cfg -sf [旧进程PID] - 查看进程 :
ps -ef | grep haproxy
七、 三大负载均衡器核心差异说明(HAProxy vs LVS vs Nginx)
-
层级与解析能力
- HAProxy :支持四层和七层,七层解析能力最强,支持 URL、Cookie、Header 等复杂匹配。
- LVS:仅支持四层,工作在内核态,不具备应用层解析能力。
- Nginx:支持四层和七层,七层解析能力较强,偏向于 Web 服务器功能。
-
性能与并发
- LVS :性能最高,基于内核态转发,适合超大规模流量(十万级并发)。
- HAProxy :性能极高,基于用户态事件驱动,适合高并发的七层业务(万级到十万级)。
- Nginx :性能高,适合处理静态资源和一般的反向代理场景。
-
功能与场景
- HAProxy :强项是七层负载均衡、健康检查、会话保持,适合作为现代微服务架构的 API 网关或核心负载入口。
- LVS :强项是四层高性能转发,适合作为整个数据中心的入口负载(如运营商级场景)。
- Nginx :强项是静态文件处理、反向代理、Rewrite 规则,适合作为 Web 服务器或静态资源 CDN 节点。