全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 7 分钟 ✍️ juanwangdev

负载均衡算法调优

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_hashIP 固定路由
后端有本地缓存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_failsfail_timeout 实现自动故障隔离

📝 发现内容有误?点击此处直接编辑

← 上一篇 缓存配置优化
下一篇 → 连接超时与keepalive优化
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库