mod_lbmethod_bybusyness 实现最少连接优先调度,仅依据后端当前活跃代理连接数分发请求,不感知CPU、内存或响应时间;需加载模块、在<Proxy>内用ProxySet lbmethod=bybusyness显式配置,并依赖后端KeepAlive正常工作。Apache 的 `mod_proxy_balancer` 本身不直接提供“繁忙度”调度,真正实现按节点当前连接数分发请求的是独立模块 `mod_lbmethod_bybusyness`。它不是感知 CPU 或响应时间的智能调度,而是统计每个后端 **当前正在处理的代理连接数**,优先把新请求交给连接数最少的节点——也就是常说的“最少连接优先”。 要在虚拟主机(VirtualHost)中正确启用这个逻辑,需同时满足模块加载、语法位置、后端协作三个条件。
必须启用并确认模块已加载
Apache 2.4.17+ 自带 `mod_lbmethod_bybusyness`,但默认不启用。漏掉这步会导致启动失败,报错类似:
Invalid command 'BalancerMember', perhaps misspelled...
检查配置中是否包含这三行(路径依发行版略有不同,如 `/etc/apache2/mods-enabled/` 或 `/etc/httpd/conf.modules.d/00-proxy.conf`):
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
验证命令:apachectl -M | grep -E 'proxy|lbmethod'
输出中必须看到 lbmethod_bybusyness_module 和 proxy_balancer_module。
在 VirtualHost 内正确声明 bybusyness 调度
关键点:必须用 proxyset lbmethod=bybusyness 显式写在 <proxy> 块内,不能只加在 balancermember 行末尾(会被忽略)。
最小可用示例(放在 <VirtualHost *:80> 内):
<Proxy "balancer://mycluster">
BalancerMember http://192.168.1.10:8080 loadfactor=1
BalancerMember http://192.168.1.11:8080 loadfactor=1
ProxySet lbmethod=bybusyness
</Proxy>
ProxyPass "/app" "balancer://mycluster/app"
ProxyPassReverse "/app" "balancer://mycluster/app"
说明:
• loadfactor 仍有效,用于加权(例如旧机器设为 loadfactor=2,表示可承担两倍连接数);
• ProxyPass 和 ProxyPassReverse 必须放在 <Proxy> 块之外,且路径需严格匹配;
• 若同时启用粘性会话(如 stickysession=JSESSIONID),它会覆盖 bybusyness 的调度逻辑——首次绑定后,后续请求固定转发,不再重新选节点。
后端配合:KeepAlive 是计数准确的前提
bybusyness 统计的是“当前活跃连接数”,依赖后端正常维持 HTTP 连接。如果后端主动快速断连(例如返回 Connection: close 或禁用 KeepAlive),Apache 就无法准确累积和比较连接数,算法会退化为近似轮询。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
建议后端(如 Tomcat、Spring Boot)开启 KeepAlive,并设置合理超时:
- Tomcat:
server.xml中<Connector>加keepAliveTimeout="60"、maxKeepAliveRequests="100" - Spring Boot:
server.tomcat.connection-timeout=60000
另外,避免在后端应用层主动写入与 Apache 冲突的路由 Cookie(如 BALANCEID),否则可能干扰连接计数或粘性逻辑。

















