Apache不原生支持最少连接数算法,需启用mod_lbmethod_bybusyness模块并配置lbmethod=bybusyness;该策略依据后端当前活跃连接数分发请求,须在<Proxy>块内设置、权重一致,并配合健康检查与balancer-manager验证。

Apache 本身不原生支持“最少连接数(Least Connections)”算法,mod_proxy_balancer 默认只提供 byrequests、bytraffic 和 bybusyness 三种调度策略。其中 bybusyness 是最接近“最少连接数”语义的内置选项——它依据后端当前活跃连接数(busy count)动态分发请求,而非单纯按请求数或流量。
确认并启用 bybusyness 调度器
该算法需加载 mod_lbmethod_bybusyness 模块(Apache 2.4.27+ 内置,旧版本需手动编译或启用)。验证方式:
- 运行
httpd -M | grep lbmethod,确认输出含lbmethod_bybusyness_module (shared) - 若缺失,在
httpd.conf中添加:LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
在 VirtualHost 中配置 bybusyness 集群
将负载均衡逻辑严格限定在虚拟主机作用域内,避免全局污染:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:80>
ServerName api.example.com
<Proxy "balancer://api">
BalancerMember http://192.168.1.10:8080 loadfactor=5
BalancerMember http://192.168.1.11:8080 loadfactor=5
BalancerMember http://192.168.1.12:8080 loadfactor=5
ProxySet lbmethod=bybusyness
ProxySet timeout=10 retry=60
</Proxy>
ProxyPass "/api/" "balancer://api/"
ProxyPassReverse "/api/" "balancer://api/"
</VirtualHost>
说明:
-
lbmethod=bybusyness必须写在<Proxy>块内部,不可放在ProxyPass行中 - 所有节点权重设为相同(如都为 5),才能真正体现“连接数少者优先”;若权重不同,则会按加权后的忙闲度计算
-
timeout控制代理等待后端响应的上限,retry设定故障节点恢复探测间隔
配合健康检查提升可靠性
仅靠连接数不够,需主动探测后端可用性:
- 确保后端服务提供轻量健康接口(如
GET /health返回 200) - 为每个
BalancerMember添加健康检查参数:hcmethod=GET hcuri="/health" failonstatus=503 - 完整示例:
BalancerMember http://192.168.1.10:8080 loadfactor=5 hcmethod=GET hcuri="/health" failonstatus=503
验证与观察
启用 balancer-manager 可视化界面,实时查看各节点连接状态:
- 在
<VirtualHost>或全局配置中加入:ProxyPass /balancer-manager !和<Location "/balancer-manager"> SetHandler balancer-manager </Location> - 访问
http://your-server/balancer-manager,观察 “Busy” 列数值变化,确认请求是否倾向连接数低的节点 - 注意:Busy 值反映的是 Apache 当前维护的到该后端的活跃连接数,不是后端自身线程数

















