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后端。