Nginx权重负载均衡按weight整数比(如3:1:2)分配请求,非百分比;需结合CPU、I/O、实测QPS设合理weight,避免过大值,并配max_fails、fail_timeout、slow_start等健康检查参数。
Nginx 实现权重负载均衡,核心是让流量分配与后端服务器的实际处理能力匹配,避免“能者多劳却无权多分”或“弱机扛重压而频繁超时”。关键不在堆参数,而在理解 weight 如何真实影响请求分发逻辑,并结合服务器资源(CPU、内存、连接数)做合理设定。比如配置:
upstream backend {server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
实际请求分配比例是 3 : 1 : 2(即约 50% / 16.7% / 33.3%),不是 30% / 10% / 20%。Nginx 的加权轮询算法会按这个整数比循环调度,不四舍五入、不归一化,也不受总和影响。
直接看硬件或监控数据更可靠:
vmstat 或 iostat 观察 avgqu-sz 和 %util,高负载节点适当降低 weight光配 weight 不代表流量真能落到可用节点上。建议每台 server 加上容错参数:
max_fails=3:连续 3 次探活失败(如 proxy_pass 超时或返回 5xx)即标记不可用fail_timeout=30s:30 秒内不再调度,之后尝试恢复探测slow_start=60s(推荐):新上线或刚恢复的节点,前 60 秒权重缓慢提升至目标值,防止瞬间洪峰压垮server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s slow_start=60s;
人工刷浏览器看不出比例,得靠可复现的统计方式:
ab -n 600 -c 10 http://your-domain/ 发起 600 次请求,再查各后端 access log 的请求数X-Backend-ID: node-a,用 curl + grep 快速汇总keepalive 或长连接,单个客户端可能复用连接,影响轮询节奏,测试时建议关闭或用多个 IP 源