核心概述
HAProxy 是高性能开源负载均衡 / 代理工具适合搭建 Web 高可用群集 对比 LVS(性能强 部署复杂)Nginx(健康检查弱 高并发一般)HAProxy 均衡性 健康检查 高并发表现更均衡
前置知识点
HTTP 请求
- GET:参数显式在 URL 适合普通查询
- POST:参数隐式传递 适合表单 账号密码提交
- 正常状态码:2×× 3×× 异常:4×× 5××
三大负载均衡算法
- RR(轮询):请求依次分配给后端节点 简单常用 支持加权轮询
- LC(最小连接数):按节点当前连接数动态分配 并发场景更优
- SH(源地址哈希):同一 IP 固定访问同一节点 实现会话保持 但易导致负载不均
常见 Web 群集调度器
- 软件:LVS,HAProxy,Nginx
- 硬件:F5,梭子鱼,绿盟
实验环境
| 主机 | IP 地址 | 角色 |
|---|---|---|
| nginx1 | 192.168.10.101 | Web 节点 1 |
| nginx2 | 192.168.10.102 | Web 节点 2 |
| haproxy | 192.168.10.103 | 负载均衡调度 |
两台 Nginx 节点编译安装
bash
# 安装依赖
dnf install -y gcc make pcre-devel zlib-devel openssl-devel
# 创建运行用户
useradd -M -s /sbin/nologin nginx
# 解压、编译、安装
tar zxf nginx-1.26.3.tar.gz
cd nginx-1.26.3
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
make && make install
- 节点 1 测试页:
echo "Server 192.168.10.101" > /usr/local/nginx/html/test.html - 节点 2 测试页:
echo "Server 192.168.10.102" > /usr/local/nginx/html/test.html - 启动:
/usr/local/nginx/sbin/nginx - 关闭防火墙:
systemctl stop firewalld
HAProxy 安装
bash
dnf install haproxy -y
HAProxy 核心配置(/etc/haproxy/haproxy.cfg)
配置分三部分:global(全局)defaults(默认)listen(应用)
bash
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
daemon
maxconn 4000
defaults
mode http
log global
option httplog
option dontlognull
retries 3
timeout connect 5s
timeout client 1m
timeout server 1m
maxconn 3000
listen webcluster
bind 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server inst1 192.168.10.101:80 check inter 2000 fall 3
server inst2 192.168.10.102:80 check inter 2000 fall 3
balance roundrobin:使用轮询算法check inter 2000:每 2 秒健康检查fall 3:连续 3 次失败则标记节点下线
群集测试
高性能(负载均衡)
访问 http://192.168.10.103/test.html 刷新会轮询显示 101/102 页面
高可用(故障自动切换)
停掉任意一台 Nginx 访问仍正常 HAProxy 自动剔除故障节点
HAProxy 独立日志配置
关键参数优化
maxconn:全局最大连接数 生产建议 10240retries:节点重试次数 生产设 5--6 次nbproc:并发进程数 提升并发能力timeout:合理设置连接 / 客户端 / 服务端超时 避免阻塞
