加权轮询通过upstream中server的weight参数实现,权重应基于CPU、内存、IO等硬件能力及压测QPS合理设定,如16核:8核:4核对应weight=4:2:1;需注意weight仅写于server行末、默认值为1、建议用整数;配合max_fails和slow_start可提升容错性;长连接场景可叠加least_conn策略优化负载。

直接在 upstream 块里配 weight 就能实现加权轮询,核心是让高配机器多扛请求、低配机器少分担,从而把集群整体算力用得更实。
权重怎么设才合理
权重不是拍脑袋定的,得跟服务器实际处理能力挂钩。比如 CPU 核心数、内存大小、磁盘 IO 能力这些硬指标,可以换算成相对比例。
- 三台机器:A(16核)、B(8核)、C(4核),按计算资源粗略对应 weight=4:2:1
- 如果某台是 SSD+高主频,另一台是机械盘+老 CPU,即使同为 8 核,权重也该拉开(比如 8 vs 3)
- 上线前建议压测单机 QPS,用实际吞吐比来反推权重,比纯看硬件参数更靠谱
配置写法与关键细节
加权轮询默认启用,不需要额外指令,但要注意几个易错点:
-
weight只写在server行末,不能加在proxy_pass或其他地方 - 没写
weight的服务器,默认值是 1;全都不写就退化成普通轮询 - 权重值建议用整数,避免小数(Nginx 内部做整数运算,小数可能被截断)
- 示例配置:
upstream app_cluster { server 10.0.1.10:8080 weight=5; server 10.0.1.11:8080 weight=3; server 10.0.1.12:8080 weight=2; }按此配置,长期请求比例约是 50% : 30% : 20%
配合故障剔除更稳当
光靠权重不够,还得防止单点拖垮整体。加上健康检查机制,能让不可用节点自动离线:
- 加
max_fails=3 fail_timeout=30s,连续失败 3 次后,30 秒内不再转发请求 - 可选加
slow_start=60s,刚恢复的节点会逐步提升流量,避免瞬间打满 - 注意:
weight和max_fails可共存,Nginx 会先按权重选,再过滤掉已标记为 down 的节点
长连接场景建议叠加 least_conn
如果后端有大量耗时操作(如导出报表、上传大文件),单纯加权轮询可能造成某台机器连接堆积。这时可以补充 least_conn 策略:
- 它不替代权重,而是“在权重框架下优先选当前连接最少的那台”
- 配置方式:在
upstream块开头加一行least_conn; - 适合连接生命周期长、响应时间差异大的业务,比如后台管理类服务


















