least_conn负载均衡体系需围绕连接感知、健康反馈、故障恢复、平滑调度四维构建:适配长连接场景,强制配置健康检查与slow_start,区分stream/http层级启用,并叠加多活集群与连接监控。

要构建高可用、高稳定的企业级 least_conn 负载均衡体系,核心不是单纯加一句 least_conn,而是围绕连接状态感知、后端健康度反馈、故障自动恢复和流量平滑调度四个维度系统设计。
明确 least_conn 的适用边界
least_conn 算法本质是“按当前活跃连接数动态选节点”,它天然适合长连接密集型服务,比如:
- WebSocket 网关(单连接持续数分钟至小时)
- gRPC 服务(HTTP/2 多路复用,连接复用率高)
- 数据库代理层(如 MySQL 连接池前置)
- 实时音视频信令服务器
但它对短连接(如普通 HTTP API)收益有限——因为连接建立/关闭极快,连接数波动大,统计意义弱。此时轮询或加权轮询反而更稳。
配置必须带健康检查与容错参数
仅写 least_conn 不足以保障高可用。每个 server 行必须显式声明容错机制,否则节点宕机后仍会持续转发请求:
-
max_fails=3:连续失败 3 次即标记为不可用 -
fail_timeout=30s:30 秒内不尝试该节点,超时后自动探测恢复 -
slow_start=60s(推荐):新上线或恢复的节点,60 秒内权重从 0 线性升至满值,避免瞬间压垮
示例:
upstream api_backend {least_conn;
server 10.10.20.1:8080 max_fails=3 fail_timeout=30s slow_start=60s;
server 10.10.20.2:8080 max_fails=3 fail_timeout=30s slow_start=60s;
}
四层(stream)与七层(http)需分场景启用
least_conn 在两个层级都支持,但行为和效果不同:
- 七层(http 块):统计的是 Nginx 到后端的 HTTP 连接数(含 keepalive),适用于 Web/API 服务
- 四层(stream 块):统计的是 TCP 连接数,毫秒级生效,延迟更低,适用于数据库、Redis、自定义 TCP 协议等
企业级部署建议:数据库集群用 stream + least_conn;Web 应用用 http + least_conn,并开启 keepalive 100 提升复用率。
配套高可用必须项
单点 Nginx 实例再稳也是单点。企业级体系必须叠加:
- 多活 Nginx 集群:前端用 Keepalived + VRRP 或云厂商 VIP,实现主备/主主切换
- 主动健康探测:配合 nginx-plus 或自研脚本,定期调用后端 /health 接口,比 TCP 层探测更准
-
连接数监控告警:采集
nginx_stub_status中Active connections及各 upstream 的server.zone指标,设置连接数突增/倾斜阈值告警 -
灰度发布支持:通过
split_clients或 OpenResty Lua 控制 least_conn 组的成员动态加载,实现节点级灰度











