用 HAProxy 做负载均衡与高可用
摘要
介绍 HAProxy 的负载均衡配置、常用算法(轮询/最少连接/源哈希/URI)、健康检查熔断、会话保持、ACL 路由与 stats 可观测,并对比 Nginx/LVS。
用 HAProxy 做负载均衡与高可用
引言
单台后端扛不住流量或怕单点故障时,就需要负载均衡。HAProxy 以高性能和极精细的健康检查著称,是四层(TCP)/七层(HTTP)均衡的经典选择,尤其适合对可用性要求严苛的场景。
一、最小配置
balance roundrobin 表示轮询;check 开启对后端的健康检查。
二、负载均衡算法
roundrobin:轮流分发,默认且通用,权重可配。leastconn:发给当前连接数最少的后端,适合长连接(如 WebSocket、数据库)。source:按客户端 IP 哈希,保证同一用户落到同一后端(会话保持)。uri:按请求 URI 哈希,适合缓存型场景。random:随机,配合大型后端池表现好。
三、健康检查与熔断
inter 2000:每 2 秒探一次。rise 2:连续 2 次成功才认为恢复。fall 3:连续 3 次失败则摘掉该节点。
单台故障会被自动剔除,恢复后自动回流,从而实现高可用。还可针对 HTTP 做七层检查:
四、会话保持(Stickiness)
stick on src 把同一客户端 IP 绑定到固定后端,适合无法共享会话状态的应用。
五、ACL 与按路径路由
六、统计与可观测
通过 stats 页面能看到每个后端的实时状态、请求数与健康情况,排障非常方便。
七、与 Nginx / LVS 的取舍
维度 | HAProxy | Nginx | LVS |
|---|---|---|---|
层级 | L4/L7 | L7(主) | L4 |
健康检查 | 极精细 | 较弱(需模块/Plus) | 依赖外部 |
场景 | 纯均衡、大并发 | 反代+Web 一体 | 超大流量入口 |
八、常见坑
后端没挂但被误摘:检查间隔与阈值是否过严。
会话不一致:有状态服务记得加 stickiness。
单点:HAProxy 本身也要做主备(keepalived + VRRP)。
小结
需要严肃的负载均衡与健康检查时,HAProxy 是首选。配合反向代理或 keepalived,就能搭出稳健的多实例高可用架构。下一篇我们深入代理协议本身:HTTP、HTTPS、SOCKS5 与透明代理。
延伸
HAProxy 官方《Configuration Manual》
下一篇:《代理协议进阶:HTTP/HTTPS/SOCKS5 与透明代理》
