最少连接调度(least_conn)通过实时分配请求至活跃连接数最少的后端,提升高并发下分流合理性,适用于长连接、响应时间差异大或后端能力不均场景,需配合健康检查、权重配置及nginx连接层调优。

最少连接调度(least_conn)在高并发场景下能显著提升请求分流的合理性,尤其适合长连接、响应时间差异大或后端处理能力不均的业务。它不是简单轮询,而是实时感知各后端的活跃连接数,把新请求导向“最空闲”的节点,从而缓解局部过载、降低平均延迟。
适用场景判断
该策略真正起效的前提是:后端服务存在连接耗时差异。比如:
- 部分接口涉及数据库慢查询,连接保持时间长;
- 混合部署了新旧机型,处理速度不一致;
- 使用 WebSocket 或 gRPC 长连接,单连接生命周期远超 HTTP 短连接。
若所有后端响应极快且连接几乎瞬时释放(如纯静态资源),least_conn 和轮询效果接近,反而增加少量计算开销。
配置要点与常见误区
启用 least_conn 很简单,但要让它稳定发挥效果,需注意三点:
-
必须配合健康检查:加上
max_fails=2 fail_timeout=30s,避免将请求持续打向已卡死但 TCP 连接未断的后端; -
权重仍生效:支持
weight参数,Nginx 会按加权后的“有效连接数”做比较(例如权重为 2 的服务器,其连接数被除以 2 后参与排序); - 不依赖 keepalive 超时设置:least_conn 统计的是当前 ESTABLISHED 连接,与客户端是否复用连接无关;但若后端主动关闭连接慢,会导致连接数虚高,建议后端也优化连接回收逻辑。
搭配 Nginx 连接层调优才完整
least_conn 是 upstream 层的调度逻辑,它的效果受限于 Nginx 自身的连接承载能力:
- 确保
worker_connections足够(如 8192~10240),否则大量请求会在 Nginx 层排队,无法及时转发; - 启用
epoll和multi_accept on,提升事件处理吞吐,避免 worker 进程成为瓶颈; - 适当调低
keepalive_timeout(如 15~30 秒),防止客户端空闲连接长期占位,影响 least_conn 的实时性判断。
验证是否生效
上线后可通过以下方式确认 least_conn 正常工作:
- 用
curl -I http://your-domain/health多次触发,观察各后端 access_log 中的访问频次是否随负载动态倾斜; - 在 Nginx 中开启
upstream_addr和upstream_connect_time日志字段,分析请求是否真的落在连接数更少的节点上; - 监控后端机器的
netstat -ant | grep :port | wc -l,对比各节点 ESTABLISHED 数量分布是否比轮询更均衡。











