Apache通过mod_proxy_balancer启用bybusyness算法可实现基于活跃连接数的智能负载均衡,需加载lbmethod_bybusyness模块、配置ProxySet lbmethod=bybusyness,并配合健康检查、超时重试与连接复用提升稳定性。

用 Apache 的 mod_proxy_balancer 实现基于活跃连接总数的智能分配,核心是启用 bybusyness 调度算法。它不看请求次数或流量大小,而是实时统计每个后端节点当前正在处理的请求数(即“繁忙度”),把新请求优先交给连接数最少的节点——这对 Java、Node.js 等响应时间波动大的应用特别有效。
确认并启用 bybusyness 所需模块
bybusyness 不是 mod_proxy_balancer 自带的,必须额外加载对应调度模块:
- Ubuntu/Debian:运行
a2enmod lbmethod_bybusyness - RHEL/CentOS:确保
/etc/httpd/conf.modules.d/00-proxy.conf中有LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so - 验证是否生效:
httpd -M | grep bybusyness应输出lbmethod_bybusyness_module (shared)
配置 balancer 使用 bybusyness 算法
在 <Proxy> 块中显式设置 lbmethod=bybusyness,并为每个后端声明基础参数:
<Proxy balancer://myapp>
BalancerMember http://192.168.1.10:8080 route=node1
BalancerMember http://192.168.1.11:8080 route=node2
ProxySet lbmethod=bybusyness
</Proxy>
ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/
注意:ProxySet 必须写在所有 BalancerMember 之后,作用于整个 balancer 组;不需要加 loadfactor,bybusyness 本身会动态覆盖静态权重。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
配合健康检查与连接管理提升稳定性
仅靠 bybusyness 不够,还需防止请求被发到已卡住或假死的节点:
- 启用主动健康检查(Apache 2.4.43+):
BalancerMember ... hcmethod=GET hcuri="/health" hcinterval=5 hcexpr="%{REQUEST_STATUS} == 200" - 设置合理超时与重试:
ProxySet timeout=15 retry=60,避免短时抖动误判,也防止长阻塞拖垮代理 - 开启连接复用:
ProxySet keepalive=on max=20 min=5 ttl=60,减少 TCP 握手开销,让活跃连接数统计更真实
验证与观察实际效果
启用 balancer-manager 页面(仅限内网)可直观看到各节点的 “Busy” 列数值:
- 访问
http://your-apache/balancer-manager - 确认每个
BalancerMember行末尾显示的 Busy 数随请求实时变化 - 手动发起并发请求(如
ab -n 100 -c 20 http://your-apache/),观察 Busy 值是否始终趋于均衡
如果 Busy 值长期悬殊,检查后端是否返回了异常状态码(如 500)、健康检查路径是否可访问,或是否存在连接池耗尽问题。

















