apache负载均衡可通过mod_lbmethod_bybusyness模块实现基于实时活跃连接数的动态调度,需加载proxy、proxy_http、proxy_balancer、lbmethod_bybusyness及slotmem_shm模块,并在balancer配置中指定lbmethod=bybusyness,配合健康检查与balancer-manager验证。

Apache 负载均衡本身不支持第三方插件式动态算法,但可通过启用内置的 mod_lbmethod_bybusyness 模块实现真正意义上的动态调度——它根据后端当前活跃连接数(即“繁忙程度”)实时分发请求,比静态权重更适应波动负载。
启用 bybusyness 动态调度
必须确保以下模块已加载:
-
mod_proxy(代理基础) -
mod_proxy_http(HTTP 协议支持) -
mod_proxy_balancer(集群管理) -
mod_lbmethod_bybusyness(核心动态算法) -
mod_slotmem_shm(必需,用于共享内存存储运行时连接状态)
Ubuntu/Debian 执行:
sudo a2enmod proxy proxy_http proxy_balancer lbmethod_bybusyness slotmem_shm sudo systemctl restart apache2
CentOS/RHEL 检查 /etc/httpd/conf.modules.d/ 下对应 LoadModule 行未被注释,例如:
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
在 balancer 配置中指定算法
算法必须绑定到具体集群定义内,不能全局设置:
<proxy>
BalancerMember http://192.168.1.10:8080 loadfactor=1
BalancerMember http://192.168.1.11:8080 loadfactor=1
ProxySet lbmethod=bybusyness
ProxySet timeout=5 retry=60
</proxy>
ProxyPass "/api/" "balancer://api/"
ProxyPassReverse "/api/" "balancer://api/"
注意:loadfactor 在 bybusyness 下仍有效,作为初始倾向权重(比如某节点硬件更强,可设为 2),但最终调度由实时连接数主导——新请求总是发给当前活跃连接最少的节点。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
配合健康检查提升动态可靠性
单纯靠连接数还不够,建议为每个后端添加主动探测:
BalancerMember http://192.168.1.10:8080 \
loadfactor=1 \
hcmethod=GET \
hcuri="/health" \
failonstatus=503 \
retry=30
这要求后端提供轻量健康接口(如 Spring Boot 的 /actuator/health),Apache 每 30 秒探测一次;失败则临时摘除,恢复后再自动加入,与 bybusyness 协同形成闭环反馈。
验证是否生效
启用 balancer-manager 页面(仅限内网调试):
<location>
SetHandler balancer-manager
Require ip 192.168.1.0/24
</location>
访问 http://your-apache/balancer-status,观察各节点的 “Busy” 列数值变化——它会随真实并发连接实时更新,这才是 bybusyness 正常工作的直接证据。
不复杂但容易忽略









