加权轮询的权重应基于服务器实际服务能力设定,优先用实测qps校准,硬件估算(cpu核数×内存gb)仅作起点;权重比需归一化为小整数,且仅在非ip_hash模式下生效,须配合健康检查提升鲁棒性。

加权轮询不是拍脑袋定数字,而是让权重比尽可能贴近真实服务能力差异。关键不在“绝对值”,而在“相对比例”是否反映后端服务器的实际处理能力比。
按硬件指标粗估权重比
推荐用「CPU核心数 × 内存容量(GB)」作为基础算力参考值,再归一化为小整数比。例如:
- 服务器A:16核 × 32GB = 512 → 约简为 weight=4
- 服务器B:8核 × 16GB = 128 → 约简为 weight=1
- 服务器C:12核 × 24GB = 288 → 约简为 weight=2(或 weight=3,视取整策略)
这样得出的 4:1:2 或 4:1:3 比例,比直接写 512:128:288 更稳定,也避免调度抖动。
结合实测QPS校准权重
硬件参数只是起点,最终要靠压测数据修正。对每台服务器单独做稳定性压测(如用 wrk 或 ab),记录其在不超载前提下的最大稳定 QPS:
- A 节点:稳定承载 1200 QPS
- B 节点:稳定承载 300 QPS
- C 节点:稳定承载 600 QPS
三者比值为 1200:300:600 = 4:1:2,与硬件估算一致,可直接采用;若不一致(比如 C 实测只有 400 QPS),就按 4:1:1.33 ≈ 4:1:1 设定,或微调为 4:1:1.5 → 8:2:3。
配置时注意算法兼容性
weight 只在加权轮询(默认)和 least_conn 模式下生效;如果 upstream 块中启用了 ip_hash,weight 将被完全忽略。确认你的配置不含冲突指令:
- ✅ 正确:只用 weight,不加 ip_hash
- ❌ 错误:upstream 中同时存在 ip_hash 和 weight
另外,Nginx 会自动归一化权重总和,不需要手动凑整到 100 或换算百分比,写 3、1、2 和写 30、10、20 效果完全一样。
搭配健康检查提升鲁棒性
仅设 weight 不够,异构集群更需动态容错。建议每台 server 行都加上基础保护参数:
- max_fails=2 fail_timeout=30s:连续失败2次即剔除30秒
- slow_start=60s:恢复后流量逐步加载,防雪崩
- 低配节点可额外加 backup 或 down 标记,便于维护
完整示例:
upstream backend {
server 192.168.1.10:8080 weight=4 max_fails=2 fail_timeout=30s slow_start=60s;
server 192.168.1.11:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.12:8080 weight=2 backup;
}











