linux下加权轮询(wrr)通过nginx或lvs配置weight参数实现请求按权重分发,nginx采用平滑wrr更均匀,lvs需用ipvsadm指定-s wrr算法;权重应基于硬件性能设定并动态调优,避免极端值和策略冲突。

Linux 下使用加权轮询(Weighted Round Robin,WRR)策略分配后端服务器权重,核心是通过负载均衡软件(如 Nginx 或 LVS)在配置中为每台后端服务器显式指定 weight 参数。权重值越大,该服务器被选中的概率越高,从而实现按性能差异合理分摊请求。
在 Nginx 中配置加权轮询
Nginx 默认使用轮询(RR),启用加权轮询只需在 upstream 块中为每个 server 添加 weight 值:
- 权重是相对值,不强制要求总和为 100 或整数,例如
weight=3和weight=1表示前者接收请求量约为后者的 3 倍 - 未设置
weight的服务器默认为weight=1 - 建议搭配健康检查使用,如
max_fails=2 fail_timeout=30s,避免故障节点持续收请求 - Nginx 实际采用的是平滑加权轮询(SWRR),能更均匀地分散请求,避免传统 WRR 在短周期内集中打到高权值节点的问题
在 LVS 中启用加权轮询
LVS 使用 ipvsadm 命令配置,需指定调度算法为 wrr,并在添加真实服务器(RS)时带上权重:
- 添加集群:
ipvsadm -A -t VIP:80 -s wrr - 添加带权重的后端:
ipvsadm -a -t VIP:80 -r RIP1:80 -w 3、ipvsadm -a -t VIP:80 -r RIP2:80 -w 1 - 权重支持动态调整,运行中可直接用
-w修改,无需重启服务 - 注意:LVS 的 WRR 是静态算法,不感知后端实时负载,适合性能长期稳定、差异明显的场景
权重设置的关键考量
权重不是拍脑袋定的,应结合服务器实际能力设定:
- CPU 核心数、内存容量、磁盘 I/O 能力可作为初始参考,例如 8 核服务器可设
weight=4,4 核设weight=2 - 上线后观察各节点的 CPU 使用率、请求延迟、错误率,反向验证权重是否合理;若某节点长期低载而另一台过载,说明权重比例需微调
- 避免极端值(如
weight=100vsweight=1),容易导致小权重节点“饿死”,失去冗余价值 - 若后端服务响应时间波动大,仅靠 WRR 不够,建议切换为 加权最小连接(WLC) 或配合主动健康探测
常见误区提醒
加权轮询容易被误用或配置失效:
-
ip_hash和least_conn等其他策略与weight共存时,部分策略会忽略权重(如纯ip_hash不支持权重),需确认文档兼容性 - Nginx 配置中,
weight必须写在server行末尾,不能放在注释后或换行错位,否则解析失败 - LVS 中若未用
-s wrr指定算法,即使加了-w,也会回退到默认的rr,权重无效 - 权重只影响新连接的分发,已建立的长连接不受影响,所以权重调整后效果有一定滞后性











