bybusyness算法可实现按连接数动态分配,是apache mod_proxy_balancer中最贴合实时负载的原生策略;需启用mod_lbmethod_bybusyness等模块,配置balancermember并设proxyset lbmethod=bybusyness,配合keep-alive及proxypass使用。
用 bybusyness 算法就能实现按连接数动态分配,这是 apache mod_proxy_balancer 中最贴合实时负载的策略,不需要额外插件或脚本干预,原生支持。
启用必要模块
确保以下模块已加载(在 httpd.conf 或 mods-enabled 中确认):
mod_proxymod_proxy_httpmod_proxy_balancer-
mod_lbmethod_bybusyness(关键!不是 byrequests) -
mod_slotmem_shm(状态共享必需)
验证命令:apachectl -M | grep -E "(proxy|lbmethod|slotmem)",看到 lbmethod_bybusyness 即生效。
定义连接数感知型集群
在配置中使用 <proxy></proxy> 块声明集群,并显式指定 lbmethod=bybusyness:
<proxy>
BalancerMember http://10.0.1.10:8080
BalancerMember http://10.0.1.11:8080
BalancerMember http://10.0.1.12:8080
ProxySet lbmethod=bybusyness
ProxySet timeout=10 retry=60 maxattempts=2
</proxy>
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 不设
loadfactor更稳妥——bybusyness 本身不依赖权重,它只看当前活跃连接数 -
timeout和maxattempts要配合后端响应特征,避免因短暂卡顿误判节点失效 - 所有后端必须支持 HTTP Keep-Alive,否则连接数统计失真(建议后端开启
KeepAlive On)
绑定路径并启用转发
在同配置文件中添加转发规则,把请求打到该集群:
ProxyPass "/api/" "balancer://api/" ProxyPassReverse "/api/" "balancer://api/"
注意:
- 必须配
ProxyPassReverse,否则重定向头会暴露内网地址 - 不要在
.htaccess中写这些——它不支持<proxy></proxy>块,且每次请求重复解析,性能差还易出错
验证与调优要点
访问 /balancer-manager(需提前配置访问控制)可实时查看各节点的 Busy 列数值,这就是当前活跃连接数。观察是否随流量波动自然倾斜,而非固定轮询。
若发现某节点长期 Busy 值偏高:
- 检查该节点是否 GC 频繁、慢查询堆积或 PHP-FPM 子进程不足
- 确认后端服务未主动关闭连接(如返回头含
Connection: close) - 避免与其他算法混用——
bybusyness不兼容stickysession或IP hash,否则失去动态意义









