apache配置bybusyness算法核心是将新请求发往当前活跃连接数最少的后端节点,需加载mod_proxy、mod_proxy_http、mod_proxy_balancer、mod_lbmethod_bybusyness和mod_slotmem_shm模块,并在块内设proxyset lbmethod=bybusyness,配合keepalive与连接池参数调优实现真实负载感知。

Apache 中配置 bybusyness 算法,核心是让新请求自动发往当前活跃连接数最少的后端节点,从而实现按真实业务负载(而非固定权重或请求数)动态分发。它不看 CPU、内存,只看“此刻有多少请求正在处理中”,特别适合长连接、文件上传、WebSocket 或响应时间波动大的场景。
启用必要模块
bybusyness 依赖共享内存记录各节点实时连接状态,必须加载以下模块(缺一不可):
- mod_proxy:代理基础支持
- mod_proxy_http:HTTP 协议转发能力
- mod_proxy_balancer:集群管理框架
- mod_lbmethod_bybusyness:动态调度算法本身(Apache 2.4+ 默认内置,但需确认启用)
- mod_slotmem_shm:提供共享内存存储运行时连接计数(关键!未加载会导致 bybusyness 退化为轮询)
Ubuntu/Debian 可执行:a2enmod proxy proxy_http proxy_balancer lbmethod_bybusyness slotmem_shm;CentOS/RHEL 请检查 httpd.conf 中对应 LoadModule 行未被注释。
配置 balancer 使用 bybusyness
在虚拟主机或主配置中定义负载均衡集群,必须在 <proxy></proxy> 块内显式设置 ProxySet lbmethod=bybusyness:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
<proxy>
BalancerMember http://10.0.1.10:8080 route=node1
BalancerMember http://10.0.1.11:8080 route=node2
ProxySet lbmethod=bybusyness
</proxy>
ProxyPass /api/ balancer://api/
注意:
– 不要混用其他 lbmethod(如 byrequests),否则调度逻辑失效;
– 后端需开启 KeepAlive On,否则连接无法复用,busy 计数失真;
– 若使用会话粘性(如 ProxySet stickysession=JSESSIONID),bybusyness 仍会在同一组粘性节点内做最小连接选择。
配合连接池参数防止假均衡
仅靠 bybusyness 不够——若连接池过小,节点易耗尽连接;过大则空闲连接堆积,掩盖真实负载。建议同步调优:
- max:单节点最大并发连接数(默认 25),根据后端处理能力设为 50–200
- min:最小保活连接数(默认 0),设为 5–10 可减少建连开销
- acquire:等待空闲连接超时(毫秒),避免线程阻塞太久
- timeout:后端响应超时(秒),建议 15–30,配合健康检查快速剔除异常节点
示例增强配置:
BalancerMember http://10.0.1.10:8080 route=node1 max=100 min=5 acquire=3000 timeout=20 BalancerMember http://10.0.1.11:8080 route=node2 max=100 min=5 acquire=3000 timeout=20
验证与调试
启用 balancer-manager 页面可实时查看各节点 busy/idle 连接数:
<location>
SetHandler balancer-manager
Require local
</location>
访问 http://your-apache/balancer-manager,观察 “Busy” 列是否随请求压力变化而动态升降。若长期恒定或全为 0,说明共享内存未生效或后端未保持长连接。









