轮询和最小连接数是两种基础负载均衡算法,nginx、traefik及云厂商elb均支持,但配置语法不同;轮询默认启用,加权需设weight;最小连接数需显式声明least_conn并配合健康检查;选择依据是连接类型与后端负载特征。

轮询和最小连接数是两种基础且高频使用的负载均衡调度算法,配置方式取决于你使用的负载均衡器。主流工具如 Nginx、Traefik 或云厂商弹性负载均衡(如华为云 ELB、阿里云 SLB)都支持这两种算法,但语法和启用逻辑略有不同。
轮询算法的典型配置方式
轮询是多数负载均衡器的默认策略,通常无需显式声明,但需注意以下关键点:
-
Nginx:不写任何调度指令即为轮询;若要启用加权轮询,用 weight 参数指定权重,例如
server 192.168.1.10 weight=3; -
Traefik:在服务定义中设置
loadBalancer: { method: "roundRobin" }(v2+ 版本默认即为轮询,可省略) - 云厂商 ELB:控制台或 API 中选择“轮询”调度方式;NFV 类型设备需注意——并发量较小时可能因多线程调度机制导致轮询效果不明显,建议压测验证
最小连接数算法的启用要点
该算法动态感知后端活跃连接数,适合长连接或响应时间差异大的场景,配置时需确保健康检查同步开启:
-
Nginx:在 upstream 块中第一行添加
least_conn;指令,后面跟 server 列表即可,例如:upstream backend {<br> least_conn;<br> server 192.168.1.10;<br> server 192.168.1.11;<br>} -
Traefik:使用
loadBalancer: { method: "leastConn" } - 云厂商 ELB:在监听器或后端服务器组配置页中选择“最小连接数”;注意部分平台(如早期 NFVSLB)不支持该算法,需确认版本兼容性
轮询 vs 最小连接数:怎么选才不踩坑
两者不是互斥选项,而是适配不同业务特征。判断依据主要看请求生命周期和后端负载波动性:
- 用轮询:HTTP 短连接、API 网关、静态资源服务,且后端服务器规格一致;若性能不均,优先改用加权轮询,按 CPU 核心数或内存比例设 weight
- 用最小连接数:WebSocket、数据库代理、实时音视频信令服务等长连接场景;也适用于计算密集型任务(如图像处理),能避免某台机器因积压请求而延迟飙升
- 特别注意:最小连接数依赖准确的连接状态统计,若后端主动关闭连接不规范(如未发送 FIN 包)、或存在大量 TIME_WAIT 连接,可能导致调度失准,建议配合 active health check 使用
验证配置是否生效的小技巧
上线后别只看日志,用轻量方法快速确认算法行为:
- 对轮询:发起连续 10 次 curl 请求,观察
X-Upstream-Addr或后端 access_log 中 client IP 分布是否循环有序 - 对最小连接数:先让一台后端保持高连接数(如模拟 200 个长连接),再发新请求,检查是否全部落到连接数更少的节点上
- 所有场景都建议开启 Nginx 的
stub_status或 Prometheus Exporter,实时观测各 upstream server 的active和requests指标










