lbset是balancermember指令的整数权重参数,数值越小优先级越高;apache按lbset分组逐级启用节点:先用lbset=0主集群,全失效才启用lbset=1热备,再全挂才启用lbset=2灾备。
在 apache 虚拟主机中用 proxypass 实现多层级容灾集群的优先级调度,关键不在 proxypass 本身——它不支持 lbset 参数;真正起作用的是 balancermember 指令中的 lbset 属性。这个机制让 apache 按“负载集”分层启用后端节点:先全力使用 lbset=0 的主集群,全部失效才降级到 lbset=1 的热备集群,再全挂才启用 lbset=2 的灾备节点。
必须放在虚拟主机内定义 balancer:// 后端
不能把 <proxy balancer:></proxy> 块写在全局配置顶层,否则虚拟主机里无法复用。正确做法是:在每个需要代理的 <virtualhost></virtualhost> 内完整定义负载均衡器,或通过 Include 引入公共配置文件(如 /etc/apache2/conf-available/balancer-main.conf)。
- 确保模块已启用:
mod_proxy、mod_proxy_balancer、mod_proxy_http、mod_slotmem_shm -
BalancerMember必须显式指定lbset,未写则默认为 0,容易误判层级 - 示例配置(放在
<virtualhost></virtualhost>内):
BalancerMember http://10.0.1.10:8080 lbset=0 retry=10
BalancerMember http://10.0.1.11:8080 lbset=0 retry=10
BalancerMember http://10.0.2.10:8080 lbset=1 retry=15
BalancerMember http://10.0.3.10:8080 lbset=2 retry=300
ProxyPass / balancer://prod/
ProxyPassReverse / balancer://prod/
合理设置 retry 值区分各层响应敏感度
retry 控制节点失败后多久重新尝试接入,它是实现“分层切换节奏”的实际杠杆:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 主集群(
lbset=0)设短值(如retry=10),故障后快速剔除、快速恢复 - 热备集群(
lbset=1)可略长(如retry=15–30),避免因瞬时抖动频繁升降级 - 灾备集群(
lbset=2)应设长(如retry=300),防止在前两级反复波动时被误启用
配合 nofailover 和 stickysession 控制会话行为
多层级下会话一致性更难保障,需明确策略:
-
nofailover=On:用户绑定到某主节点后,该节点宕机也不切到备集群——适合强状态应用(如老版 Java Web 容器未共享 session) -
stickysession=JSESSIONID|jsessionid:仅在同层内生效(即只在lbset=0的两个节点间粘性),不会跨层级保持 - 若需跨层会话一致,必须由后端统一存储 session(如 Redis 或数据库),Apache 不参与跨
lbset的粘性路由
验证与运维要点
上线前务必检查几项:
- 用
httpd -t验证语法,lbset写错或漏写会导致整个<proxy></proxy>块失效 - 访问
/balancer-manager(需配置<location></location>并授权)查看各节点状态和当前生效的lbset组 - 模拟主集群宕机(如停掉两台
lbset=0服务),观察日志是否在 retry 间隔后自动启用lbset=1节点 - 注意:所有
BalancerMember地址必须可被 Apache 进程直接访问,且目标端口开放










