负载均衡指南
算法对比
| 算法 | 工作方式 | 最适合 |
|---|---|---|
| 轮询 (Round Robin) | 按顺序依次分发请求 | 同质服务器、无状态应用 |
| 加权轮询 | 按权重比例分配流量 | 不同配置的服务器 |
| 最少连接 | 发送到活跃连接数最少的服务器 | 长连接(WebSocket、数据库) |
| 加权最少连接 | 结合权重与连接数 | 混合负载 |
| IP 哈希 | 同一客户端 IP 路由到同一服务器 | 无需 Cookie 的会话保持 |
| 随机 | 随机选择服务器 | 简单无状态负载 |
| 资源感知 | 路由到资源最充裕的服务器 | CPU/内存密集型任务 |
Nginx Upstream 配置
http {
# 轮询(默认)
upstream backend_rr {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
# 加权
upstream backend_weighted {
server 10.0.0.1:8080 weight=5;
server 10.0.0.2:8080 weight=3;
server 10.0.0.3:8080 weight=2;
}
# 最少连接
upstream backend_lc {
least_conn;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
# IP 哈希(会话保持)
upstream backend_sticky {
ip_hash;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend_rr;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
健康检查配置
upstream backend {
server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.3:8080 backup; # 其他节点故障时启用
}
HAProxy 配置
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
option httpchk GET /health
server s1 10.0.0.1:8080 check inter 5s rise 2 fall 3
server s2 10.0.0.2:8080 check inter 5s rise 2 fall 3
server s3 10.0.0.3:8080 check inter 5s rise 2 fall 3 backup
四层 vs 七层负载均衡
| 类型 | 层级 | 能力 | 示例 |
|---|---|---|---|
| L4(传输层) | TCP/UDP | 速度快,不检查内容,基于 IP/端口路由 | HAProxy TCP 模式、AWS NLB |
| L7(应用层) | HTTP/HTTPS | URL 路由、头部检查、SSL 终止、压缩 | Nginx、HAProxy HTTP、AWS ALB |