13.1.1 HAProxy定位与核心能力
HAProxy定位为高性能的四层/七层负载均衡与反向代理组件,核心价值在于高并发连接处理、精细化流量控制与稳定可用性保障。其事件驱动与连接复用模型适合大量短连接与长连接业务,是中间层流量入口与服务治理的关键组件。
原理草图(流量路径与能力边界):
核心能力与定位要点:
- 负载均衡:轮询、最少连接、源地址一致性等算法,满足不同分发策略。
- 会话保持:Cookie、源IP哈希维持有状态会话。
- 健康检查:主动/被动结合,故障实例自动摘除与恢复。
- 高性能代理:TCP/HTTP模式低延迟高吞吐。
- 访问控制与路由:ACL按域名/路径/请求头转发。
- 可观测性:内置统计页面与指标导出。
- 安全与协议:SSL终止与加密卸载,支持SNI/HTTP2(视版本)。
安装与最小可运行示例(含命令解释):
# Debian/Ubuntu
sudo apt update
sudo apt install -y haproxy
# CentOS/RHEL
sudo yum install -y haproxy
基础配置示例(/etc/haproxy/haproxy.cfg),含注释与预期效果:
global
log /dev/log local0
maxconn 20000 # 允许的最大并发连接数
daemon
defaults
mode http # HTTP代理模式
timeout connect 5s
timeout client 50s
timeout server 50s
option httplog
frontend fe_web
bind *:80 # 监听80端口
acl is_api path_beg /api # 路径匹配ACL
use_backend be_api if is_api
default_backend be_web
backend be_web
balance roundrobin # 轮询
server web1 10.0.0.11:8080 check
server web2 10.0.0.12:8080 check
backend be_api
balance leastconn # 最少连接
server api1 10.0.0.21:8080 check
server api2 10.0.0.22:8080 check
listen stats
bind *:8404
stats enable
stats uri /stats
stats auth admin:Admin123
启动与验证:
# 语法检查
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
# 启动/重载
sudo systemctl enable --now haproxy
sudo systemctl reload haproxy
# 预期效果:访问统计页面
curl -u admin:Admin123 http://127.0.0.1:8404/stats
常见排错要点(命令与解释):
# 1) 查看服务状态与最近错误
sudo systemctl status haproxy -l
# 2) 查看日志(系统日志或rsyslog)
sudo journalctl -u haproxy --since "10 min ago"
# 3) 端口占用检查(80被占用时会失败)
sudo ss -lntp | grep :80
# 4) 检查后端健康与连通性
curl -I http://10.0.0.11:8080
curl -I http://10.0.0.12:8080
练习与实践任务:
1) 将默认轮询改为源地址一致性(保持用户会话):
backend be_web
balance source
2) 为API后端增加健康检查间隔与失败阈值:
backend be_api
server api1 10.0.0.21:8080 check inter 2s fall 3 rise 2
3) 验证ACL路由:访问 /api/health 走API后端,访问 / 走Web后端。