mod_proxy_balancer 的 bybusyness 算法基于后端活跃连接数动态分发请求,需启用 mod_lbmethod_bybusyness 模块、配置 lbmethod=bybusyness,并调优 timeout、retry 等参数;可结合 mod_proxy_hcheck 实现自定义指标联动。

Apache mod_proxy_balancer 本身不直接采集 CPU、内存或请求延迟等实时运行指标,但它可通过 bybusyness 调度算法,基于后端节点当前的活跃连接数(即“忙闲程度”)动态分发请求——这是最贴近“运行时指标驱动”的原生方式。
核心机制:bybusyness 是唯一依赖实时状态的内置算法
该算法不看权重、不计请求数或流量,只关注每个后端正在处理的并发请求数。Apache 在每次转发前检查各节点的当前活跃连接数,优先将新请求发给数值最小的那个节点。
- 需显式启用调度模块:
mod_lbmethod_bybusyness(Apache 2.4+ 默认未加载,须确认存在) - 配置中必须使用
lbmethod=bybusyness,且不能与stickysession同时启用(否则粘性会覆盖动态调度) - 无需额外健康检查配置,活跃连接数天然反映服务是否可响应;若节点无响应,连接堆积,自动被跳过
让 bybusyness 发挥真实效果的关键设置
默认行为可能弱化其敏感度,需调整以下参数确保快速响应变化:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
timeout=5:缩短单次代理请求等待上限,避免一个慢节点拖长整体连接生命周期 -
retry=10:节点失败后仅等待 10 秒就重新尝试,加快恢复感知(retry=0表示立即重试,慎用) - 所有
BalancerMember不设status=+H或loadfactor,避免干扰忙闲判断逻辑
进阶:用外部监控 + mod_proxy_hcheck 实现自定义指标联动
若需依据 Prometheus 指标(如 JVM GC 时间、队列积压量)或自定义健康端点做调度,可结合 mod_proxy_hcheck(Apache 2.4.43+):
- 后端提供
/health?metric=load接口,返回 JSON 如{"load": 72} - 在
BalancerMember中配置主动探测:hcmethod=GET hcuri="/health?metric=load" hcexpr="%{ENV:HC_RES_BODY_JSON:load} < 80" - 满足表达式的节点才参与
bybusyness竞争;不满足则标记为 down,自动剔除
验证调度是否按忙闲生效
访问 /balancer-manager 页面(需已授权),观察 “Current Load” 列数值变化:
- 手动发起并发请求(如
ab -n 100 -c 20 http://yourdomain/app/) - 刷新页面,看到某节点数值明显升高,其他节点保持低位 → 说明
bybusyness正常工作 - 若数值长期持平或全为 0,检查是否漏载
mod_lbmethod_bybusyness或后端未正确关闭连接(Keep-Alive 未合理配置)

















