负载均衡算法与配置
NGINX 作为负载均衡器将流量分发到多个后端服务器。正确配置可提升可用性、响应速度和资源利用率。
upstream 定义
基本配置
nginx
http {
upstream backend_pool {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
upstream 块必须在 http 块内定义。proxy_pass 引用 upstream 名称即可使用。
调度算法
五种内置算法
nginx
# 1. round-robin(默认)
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
# 2. weighted - 加权轮询
upstream backend {
server 10.0.0.1:8080 weight=3;
server 10.0.0.2:8080 weight=1;
}
# 3. least_conn - 最少连接
upstream backend {
least_conn;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
# 4. ip_hash - IP 哈希
upstream backend {
ip_hash;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
# 5. hash - 自定义哈希
upstream backend {
hash $cookie_session_id consistent;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
服务器参数
完整参数说明
nginx
upstream backend {
# 正常服务器
server 10.0.0.1:8080 weight=5 max_fails=3 fail_timeout=30s;
# 备份服务器
server 10.0.0.2:8080 backup;
# 维护中的服务器
server 10.0.0.3:8080 down;
# IPv6 地址
server [2001:db8::1]:8080;
# Unix socket
server unix:/tmp/backend.sock;
}
weight— 权重,值越高分配越多max_fails— 连续失败上限,达到后标记不可用fail_timeout— 失败后隔离时间,也是重试检查周期backup— 备份服务器,仅在正常服务器不可用时使用down— 标记为永久不可用(配合 ip_hash 使用)
负载均衡配置示例
典型生产环境
nginx
upstream api_backend {
least_conn;
server 10.0.0.1:8080 weight=5 max_fails=2 fail_timeout=15s;
server 10.0.0.2:8080 weight=3 max_fails=2 fail_timeout=15s;
server 10.0.0.3:8080 backup;
}
server {
listen 80;
location /api/ {
proxy_pass http://api_backend;
proxy_next_upstream error timeout http_500 http_502;
proxy_next_upstream_tries 2;
}
}
proxy_next_upstream定义哪些情况下尝试下一台服务器。http_500等可配置,避免将错误返回给客户端。
要点总结
- upstream 块在 http 层定义,通过 proxy_pass 引用
- 5 种内置算法:round-robin、weighted、least_conn、ip_hash、hash
weight按服务器性能比例分配流量max_fails+fail_timeout实现自动故障摘除backup标记备份服务器proxy_next_upstream配置故障转移条件
📝 发现内容有误?点击此处直接编辑