权重策略不提升总承载能力,而是优化资源分配以提升实际并发量与响应稳定性;通过weight实现按性能比例分发,结合least_conn应对长连接,辅以健康检查与监控验证确保有效性。

权重策略本身不直接“提升”集群总承载能力,而是让已有资源分配更合理,避免强节点闲置、弱节点过载,从而在不增加机器的前提下,实际支撑更高并发量和更稳响应表现。
用 weight 实现按性能比例分发
weight 是加权轮询的核心参数,它告诉 Nginx 每台后端服务器相对处理能力的比值。不是百分比,而是比例关系——Nginx 按权重累计值做长期轮询调度。
- 三台机器性能比约为 4:2:1,就设 weight=4、weight=2、weight=1;请求长期分布接近 57% / 29% / 14%
- 权重值建议从整数起步(如 1/2/3/5),避免小数或过大数值(如 100/200),便于后期调整和排查
- 新旧混部时,可先设低权重(如 weight=1)灰度上线,观察 CPU、响应时间、错误率后再逐步调高
搭配 least_conn 应对长连接场景
纯 weight 轮询只管“次数”,不管“连接是否还在”。上传、导出、WebSocket 等长耗时请求容易导致某节点连接堆积,而其他节点空闲。least_conn 可动态补位。
- 在 upstream 块中添加 least_conn 指令,它与 weight 共存且优先级更高:先选当前活跃连接最少的节点,再在这些节点中按权重分配
- 注意:least_conn 和 ip_hash 互斥,不能同时启用
- 适合后端平均响应时间 > 500ms 或存在大量 keepalive 连接的业务
靠被动健康检查守住权重有效性
权重只对健康节点生效。若一台机器已宕机或持续超时,还往它身上分 20% 流量,反而拖垮整体可用性。
- 为每个 server 补充 max_fails=3 fail_timeout=30s,Nginx 自动记录失败并临时摘除该节点
- 配合 proxy_next_upstream error timeout,让单次请求失败后自动重试下一个节点
- fail_timeout 时间建议设为 2–5 倍平均响应时间,太短易误剔,太长恢复慢
权重配置后要验证与迭代
配完不等于生效,也不代表最优。真实效果需结合监控数据判断:
- 用 nginx stub_status 或 Prometheus + nginx-vts-exporter 查看各 upstream server 的 requests 和 active connections 分布
- 对比各节点的 CPU 使用率、5xx 错误率、P95 响应时间,若偏差显著(如高权重点 CPU 反而更低),说明权重偏高或瓶颈不在 CPU
- 调整权重建议每次浮动 ≤30%,避免抖动;记录每次变更时间与影响,形成配置基线


















