Nginx通过upstream块中server指令的weight参数实现加权轮询,权重为正整数、表示相对服务能力,自动按比例分配流量(如5:3:2对应50%:30%:20%),必须定义在http块内upstream中,且需搭配max_fails和fail_timeout等健康检查机制确保稳定性。

权重策略在 Nginx 中通过 weight 参数实现流量按比例分发,本质是加权轮询(Weighted Round Robin),不是简单按次数叠加,而是基于累计权重的调度逻辑,确保长期分配结果贴近设定比例。
权重配置的基本写法
在 upstream 块中为每个 server 指定 weight 值,默认为 1。数值越大,承担请求的比例越高:
-
server 192.168.1.101 weight=5;→ 理论占比约 50%(若总权重为 10) -
server 192.168.1.102 weight=3;→ 占比约 30% -
server 192.168.1.103 weight=2;→ 占比约 20%
权重不需归一化,Nginx 自动按比例计算;但建议保持整数、避免过大差异(如 1 和 100),否则小权重服务器可能长时间无流量。
结合健康检查提升稳定性
仅设权重不够可靠,必须搭配故障探测机制,防止将请求发给已宕机的节点:
- 用
max_fails=3 fail_timeout=30s标记连续失败后临时剔除节点 - 可配合
down手动下线维护中的服务器(如server 192.168.1.104 down;) - 用
backup标记灾备节点,仅当其他全不可用时启用
适用场景与权重设定依据
权重不是拍脑袋定的,应基于实际服务能力量化:
- CPU 核心数:8 核机器设 weight=8,4 核设 weight=4
- 内存容量:32GB 服务器可设为 16,16GB 设为 8(按 GB/2 取整)
- 灰度发布:新版本实例设 weight=1,老版本设 weight=9,实现 10% 流量切入
- 混合部署:新服务器 weight=5,旧服务器 weight=2,避免旧机过载
验证与调优要点
配置生效后需验证是否达到预期分布:
- 用
curl -I或日志统计各后端 IP 的访问频次(建议采样 1000+ 请求) - 观察误差:正常情况下实际占比偏差应
- 不支持运行时动态改权重(除非使用 Lua + balancer_by_lua* 或 Nginx Plus)
- 修改权重后需重载配置:
nginx -s reload,无需重启进程
不复杂但容易忽略。
文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/xinjizixun/123663.html