Skip to content

第 6 章 · 软件负载均衡实战

生活类比:选大堂经理也有不同风格——
Nginx 像干练的多面手,Web 场景够用又轻;
HAProxy 像专业调度员,统计报表极详细;
APISIX 像带 AI 助手的新经理,插件丰富还能热更新。


6.1 主流软件 LB 对比

产品类型强项弱项典型场景
NginxL7 反向代理 + LB简单、高性能、生态大开源版无主动健康检查静态资源 + API 反代
OpenRestyNginx + Lua可编程、灵活要会 Lua复杂网关逻辑
HAProxyL4/L7 专业 LB算法全、监控强、稳定配置语法学习曲线入口 LB、数据库入口
Traefik云原生网关自动发现 K8s/Docker极致性能不如 Nginx容器环境
APISIXAPI 网关动态配置、插件、主动健康检查组件较多微服务 API 网关
Envoy数据面代理xDS、可观测、Service Mesh配置复杂Istio 数据面
LVSLinux 内核 L4极高性能只做 L4超大流量入口

6.2 Nginx 负载均衡(最常用)

详细配置见 front/nginx/06_load_balance,本章提炼核心。

最小可用配置

nginx
upstream api_backend {
    least_conn;
    server 10.0.0.1:8080 weight=2 max_fails=3 fail_timeout=30s;
    server 10.0.0.2:8080 weight=2 max_fails=3 fail_timeout=30s;
    server 10.0.0.3:8080 weight=1 backup;
    keepalive 64;
}

server {
    listen 80;
    location /api/ {
        proxy_pass http://api_backend/;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_next_upstream error timeout http_502 http_503 http_504;
        proxy_next_upstream_tries 2;
    }
}

三个必记配置组合

目的配置
上游长连接keepalive + proxy_http_version 1.1 + Connection ""
故障转移max_fails + fail_timeout + proxy_next_upstream
真实客户端 IPX-Real-IP + X-Forwarded-For

生活例子

Nginx 像 连锁快餐店的标准 Operating Manual——照着做就能开起来,80% 场景够用。


6.3 HAProxy 简介

HAProxy 配置分 frontend(入口)和 backend(后端池):

haproxy
frontend http_front
    bind *:80
    default_backend api_servers

backend api_servers
    balance leastconn
    option httpchk GET /healthz
    server s1 10.0.0.1:8080 check inter 5s fall 3 rise 2
    server s2 10.0.0.2:8080 check inter 5s fall 3 rise 2
指令含义
balance leastconn最少连接算法
option httpchk主动 HTTP 健康检查
check inter 5s fall 3 rise 2每 5s 探一次,3 败 down,2 胜 up

何时选 HAProxy 而非 Nginx?

  • 需要 更专业的 LB 统计(队列、会话、健康状态一页看清)
  • 入口层 L4 + L7 统一 管理
  • 主动健康检查 有强需求且不想上商业 Nginx Plus

6.4 APISIX / Kong(API 网关型)

适合 微服务 API 统一入口

  • 路由:/user/* → 用户服务
  • 插件:限流、JWT 鉴权、Prometheus、链路追踪
  • 动态 upstream:改配置不用 reload
json
{
  "uri": "/api/*",
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "10.0.0.1:8080": 1,
      "10.0.0.2:8080": 1
    },
    "checks": {
      "active": {
        "http_path": "/healthz",
        "healthy": { "interval": 5, "successes": 2 },
        "unhealthy": { "interval": 5, "http_failures": 3 }
      }
    }
  }
}

生活例子:APISIX 像 商场总服务台——不只指路,还能查会员、限人流、发优惠券(插件)。


6.5 LVS(四层极致性能)

LVS 工作在内核,转发模式:

模式简述
NATLB 改目标 IP,后端回程经 LB
DR(直接路由)LB 只改 MAC,响应直达客户端,性能最高
TUN跨机房隧道
                [LVS VIP]
               /    |    \
         [RS1] [RS2] [RS3]   Real Server 集群

适合 百万级并发连接 的入口,上面再挂 Nginx 做 L7。


6.6 选型决策(软件层)

小项目 / 静态 + API?
  └─► Nginx upstream

要专业 LB 统计 + 主动健康检查?
  └─► HAProxy 或 APISIX

K8s 容器环境?
  └─► Traefik / Ingress-Nginx / APISIX Ingress

Service Mesh?
  └─► Envoy(Istio 数据面)

百万连接 L4 入口?
  └─► LVS + 上层 L7

6.7 性能优化要点

① 开启长连接(见 Nginx 06 章)

避免每次请求 TCP 三次握手。

② 合理 worker 与连接数

nginx
worker_processes auto;
events { worker_connections 65535; }

③ 内核参数

bash
# 临时示例,生产按容量规划
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_tw_reuse=1

④ 日志采样

高 QPS 时 access log 打满磁盘——可采样或走异步日志。


6.8 一句话总结

入门 Nginx,专业 HAProxy,微服务 APISIX/Envoy,极致 L4 用 LVS——先选对角色,再抠配置细节。

下一章 → 07 · 云原生与 K8s