13.1.3 与Nginx、LVS的对比与选型建议

HAProxy、Nginx 与 LVS 分别代表四层/七层代理、Web 服务器与内核级负载均衡的不同技术路线。本节通过对比维度、原理草图与命令示例给出选型建议,并提供安装、排错与练习。

原理草图(对比链路)#

文章图片

选型对比要点#

  • 性能与延迟:LVS 最高、HAProxy 次之、Nginx 在高并发 HTTP 场景表现优秀,但四层转发性能不及前两者。
  • 功能与灵活性:HAProxy 规则引擎强,支持 ACL、会话保持与丰富健康检查;Nginx 擅长 HTTP/缓存生态;LVS 功能单一。
  • 运维与可观测:HAProxy 自带统计页;Nginx 需插件或生态补齐;LVS 需配合 keepalived/监控。
  • 协议支持:HAProxy 兼容 L4/L7;Nginx 以 HTTP/HTTPS 为主;LVS 主要四层。

典型场景与建议#

  1. 极致性能四层转发:LVS + keepalived,必要时上层叠加 HAProxy/Nginx 实现七层能力。
  2. 需要灵活策略与健康检查:HAProxy 更通用,适合微服务入口、数据库代理、多协议。
  3. Web 服务与静态资源:Nginx 更合适,复杂路由可与 HAProxy 组合。
  4. 混合架构:LVS 前端分发,HAProxy/Nginx 负责七层处理,兼顾性能与功能。

安装示例与核心命令#

1) 安装 HAProxy(示例:Ubuntu/Debian)#

sudo apt update
sudo apt install -y haproxy
sudo systemctl enable --now haproxy
sudo systemctl status haproxy

关键命令解释:
- systemctl enable --now haproxy:设置开机自启并立即启动。

2) 安装 Nginx#

sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx

3) 安装 LVS 组件(ipvsadm)#

sudo apt update
sudo apt install -y ipvsadm
sudo ipvsadm -L -n

关键命令解释:
- ipvsadm -L -n:查看 IPVS 转发表,-n 表示不解析域名。


配置示例(可直接运行的最小化配置)#

HAProxy:HTTP 负载均衡(/etc/haproxy/haproxy.cfg)#

global
    maxconn 2000
    log /dev/log local0

defaults
    mode http
    timeout connect 5s
    timeout client  50s
    timeout server  50s
    option httplog

frontend fe_http
    bind *:80
    default_backend be_app

backend be_app
    balance roundrobin
    option httpchk GET /health
    server s1 10.0.0.11:8080 check
    server s2 10.0.0.12:8080 check

生效与验证:

sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy
curl -I http://<haproxy_ip>/

预期效果:请求在 s1/s2 之间轮询,健康检查失败的节点自动摘除。

Nginx:反向代理(/etc/nginx/conf.d/app.conf)#

upstream app {
    server 10.0.0.11:8080 max_fails=3 fail_timeout=10s;
    server 10.0.0.12:8080 max_fails=3 fail_timeout=10s;
}

server {
    listen 80;
    location / {
        proxy_pass http://app;
        proxy_set_header Host $host;
    }
}

生效与验证:

sudo nginx -t
sudo systemctl reload nginx
curl -I http://<nginx_ip>/

LVS:DR 模式转发示例(命令式)#

# 虚拟服务 10.0.0.100:80,轮询算法
sudo ipvsadm -A -t 10.0.0.100:80 -s rr
# 添加两台后端 real server
sudo ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.11:80 -g
sudo ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.12:80 -g
# 查看规则
sudo ipvsadm -L -n

关键参数解释:
- -A:新增虚拟服务;-a:新增真实服务器
- -s rr:轮询算法
- -g:DR 模式(Direct Routing)


排错要点(含命令)#

HAProxy#

sudo haproxy -c -f /etc/haproxy/haproxy.cfg   # 检查语法
sudo tail -f /var/log/haproxy.log             # 查看日志
sudo ss -lntp | grep haproxy                  # 监听端口检查

常见问题:
- 端口不通:检查 bind 端口、系统防火墙与安全组。
- 后端全下线:检查 option httpchk 的健康检查路径是否存在。

Nginx#

sudo nginx -t
sudo tail -f /var/log/nginx/error.log

LVS#

sudo ipvsadm -L -n
sudo sysctl net.ipv4.ip_forward              # 需为 1

常见问题:
- DR 模式请求无回包:real server 需配置 VIP 到 loopback 并禁用 ARP 应答。


练习(动手验证)#

  1. 用 HAProxy 配置一个 /health 健康检查,停止一台后端服务,观察流量自动切换。
  2. 用 Nginx 添加静态文件目录与缓存,比较与 HAProxy 的响应时延。
  3. 使用 LVS 配置 rrwrr 两种算法,对比连接分布差异。

结论:HAProxy 在功能与性能的平衡上更适合作为通用负载均衡器;Nginx 更适合 Web 入口与内容服务;LVS 适用于高吞吐四层转发的基础设施级场景。