1. 负载均衡策略
Nginx支持多种负载均衡算法,通过upstream
模块配置:
1.1 轮询(Round Robin)
-
默认策略,按顺序分发请求。
-
配置示例 :
nginxupstream backend { server backend1.example.com; server backend2.example.com; }
1.2 权重(Weighted Round Robin)
-
根据服务器权重分配流量,权重越高请求越多。
-
适用场景:后端服务器性能不均。
-
配置示例 :
nginxupstream backend { server backend1.example.com weight=3; # 处理3/5的请求 server backend2.example.com weight=2; # 处理2/5的请求 }
1.3 IP哈希(IP Hash)
-
根据客户端IP的哈希值固定分配到同一服务器。
-
适用场景:需要会话保持(如Session)。
-
配置示例 :
nginxupstream backend { ip_hash; server backend1.example.com; server backend2.example.com; }
-
注意 :与
weight
参数不兼容,服务器宕机可能导致会话丢失。
1.4 最少连接(Least Connections)
-
将请求分发给当前连接数最少的服务器。
-
适用场景:处理长连接或请求耗时差异大的服务。
-
配置示例 :
nginxupstream backend { least_conn; server backend1.example.com; server backend2.example.com; }
2. 健康检查
通过max_fails
和fail_timeout
实现被动健康检查:
2.1 参数说明
max_fails
:在fail_timeout
时间内失败次数超过此值,标记服务器不可用。fail_timeout
:服务器被标记为不可用的时长,之后重新尝试。
2.2 配置示例
nginx
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=2 fail_timeout=20s;
}
- 行为 :30秒内失败3次,则
backend1
暂停30秒;20秒内失败2次,则backend2
暂停20秒。
2.3 主动健康检查(需第三方模块)
-
使用
nginx_upstream_check_module
模块定期主动探测:nginxupstream backend { server backend1.example.com; server backend2.example.com; check interval=3000 rise=2 fall=5 timeout=1000 type=http; check_http_send "GET /health HTTP/1.1\r\nHost: localhost\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; }
interval
:检查间隔(毫秒)。rise
:成功次数后标记为健康。fall
:失败次数后标记为不健康。
3. 高级配置
3.1 备用服务器(Backup)
-
当主服务器全部不可用时启用。
nginxupstream backend { server backend1.example.com; server backend2.example.com; server backup.example.com backup; # 备用服务器 }
3.2 故障转移
-
使用
proxy_next_upstream
定义重试条件:nginxlocation / { proxy_pass http://backend; proxy_next_upstream error timeout http_500 http_502; }
3.3 动态DNS解析
-
解决后端服务器IP变更问题:
nginxresolver 8.8.8.8 valid=30s; # 使用Google DNS,30秒刷新 upstream backend { server backend.example.com resolve; # 动态解析域名 }
4. 场景与策略选择
场景 | 推荐策略 | 配置要点 |
---|---|---|
无状态服务,服务器性能均衡 | 轮询 | 无需额外参数。 |
服务器性能不均 | 权重 | 按性能分配weight 值。 |
需要会话保持 | IP哈希 | 确保用户请求固定后端。 |
长连接或处理时间差异大 | 最少连接 | 优化负载分配。 |
高可用性要求 | 健康检查 + Backup | 设置max_fails 和backup 服务器。 |
5. 完整配置示例
nginx
http {
upstream backend {
least_conn;
server backend1.example.com weight=3 max_fails=2 fail_timeout=15s;
server backend2.example.com weight=2 max_fails=3 fail_timeout=20s;
server backup.example.com backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout http_500;
}
}
}
6. 验证与测试
-
语法检查 :
bashnginx -t
-
重新加载配置 :
bashnginx -s reload
-
日志监控 :
bashtail -f /var/log/nginx/error.log
通过合理配置策略和健康检查,Nginx能有效提升服务的可用性和性能。