用 HAProxy 做负载均衡与高可用

用 HAProxy 做负载均衡与高可用引言单台后端扛不住流量或怕单点故障时，就需要负载均衡。HAProxy 以高性能和极精细的健康检查著称，是四层（TCP）/七层（HTTP）均衡的经典选择，尤其适合对可用性要求严苛的场景。一、最小配置 frontend http_in bind *:80 default_backend app_pool backend app_pool balance roundrobin server app1 10.0.0.11:8080 check server app2 10.0.0.12:8080 check server app3 10.0.0.13:8080 check balance roundrobin 表示轮询；check 开启对后端的健康检查。二、负载均衡算法 roundrobin：轮流分发，默认且通用，权重可配。 leastconn：发给当前连接数最少的后端，适合长连接（如 WebSocket、数据库）。 source：按客户端 IP 哈希，保证同一用户落到同一后端（会话保持）。 uri：按请求 URI 哈希，适合缓存型场景。 random：随机，配合大型后端池表现好。 backend app_pool balance leastconn server app1 10.0.0.11:8080 weight 3 check 三、健康检查与熔断 server app1 10.0.0.11:8080 check inter 2000 rise 2 fall 3 inter 2000：每 2 秒探一次。 rise 2：连续 2 次成功才认为恢复。 fall 3：连续 3 次失败则摘掉该节点。单台故障会被自动剔除，恢复后自动回流，从而实现高可用。还可针对 HTTP 做七层检查： option httpchk GET /healthz http-check expect status 200 四、会话保持（Stickiness） backend app_pool stick-table type ip size 200k expire 30m stick on src server app1 10.0.0.11:8080 check stick on src 把同一客户端 IP 绑定到固定后端，适合无法共享会话状态的应用。五、ACL 与按路径路由 frontend http_in bind *:80 acl is_api path_beg /api use_backend api_pool if is_api default_backend web_pool 六、统计与可观测 frontend stats bind *:8404 stats enable stats uri / stats auth admin:changeme 通过 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 与透明代理》