负载均衡算法调优
NGINX 提供多种负载均衡算法。选择合适的算法并调整参数,可最大化后端资源利用率并保证服务质量。
内置算法
round-robin(默认)
nginx
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
按顺序轮询分配。简单但忽略服务器性能差异和当前负载。
weighted round-robin
nginx
upstream backend {
server 10.0.0.1:8080 weight=3; # 60% 流量
server 10.0.0.2:8080 weight=2; # 40% 流量
}
weight越高分配越多。适合性能不均的服务器集群。总和不必为 100,NGINX 自动按比例分配。
least-connected
nginx
upstream backend {
least_conn;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
优先分配给当前活跃连接最少的服务器。适合请求处理时间差异大的场景。
ip-hash
nginx
upstream backend {
ip_hash;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
根据客户端 IP hash 分配,同一 IP 始终路由到同一后端。用于无共享 session 的会话保持。
高级算法
hash 自定义
nginx
upstream backend {
hash $request_uri consistent;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
按指定变量 hash。
consistent参数使用一致性 hash,服务器增减时仅最小化影响范围。适合缓存场景。
算法选择指南
按场景选择
| 场景 | 推荐算法 | 理由 |
|---|---|---|
| 服务器性能相同 | round-robin | 简单高效 |
| 服务器性能不均 | weighted | 按比例分配流量 |
| 请求处理时间差异大 | least_conn | 避免慢请求阻塞 |
| 需要会话保持 | ip_hash | IP 固定路由 |
| 后端有本地缓存 | hash consistent | 提高缓存命中率 |
服务器状态控制
动态调整
nginx
upstream backend {
server 10.0.0.1:8080 weight=5 max_fails=3 fail_timeout=30s;
server 10.0.0.2:8080 weight=3 max_fails=2 fail_timeout=20s;
server 10.0.0.3:8080 backup; # 仅当其他服务器不可用时
server 10.0.0.4:8080 down; # 标记下线(维护用)
}
max_fails— 连续失败次数上限fail_timeout— 失败后的隔离时间,也是检查周期backup— 备份服务器,正常时不分配流量down— 手动标记下线
慢启动
gradual ramp-up (NGINX Plus)
nginx
upstream backend {
server 10.0.0.1:8080 slow_start=30s;
server 10.0.0.2:8080 slow_start=60s;
}
服务器恢复后逐步增加流量分配,避免瞬间过载。此功能仅 NGINX Plus 提供,开源版需配合其他工具。
算法调优建议
实践原则
- 无状态 API 首选
least_conn+weight - 有本地缓存的后端使用
hash consistent - 混合性能集群使用
weighted least_conn - 频繁扩缩容的场景使用一致性 hash
- 配合健康检查及时摘除故障节点
要点总结
round-robin默认且简单,适合均质服务器集群least_conn适合请求处理时间差异大的场景ip_hash用于无共享存储的会话保持hash consistent提高后端本地缓存命中率weight按服务器性能比例分配流量backup标记备份服务器,正常时不参与- 配合
max_fails和fail_timeout实现自动故障隔离
📝 发现内容有误?点击此处直接编辑