lbset是balancermember的参数,用于按数值优先级分组实现故障转移:先用lbset=0主集群,全失效后才降级到lbset=1备集群,再失效才启用lbset=2灾备集群。

Apache 的 mod_proxy_balancer 本身不支持原生的“多层级容灾集群”或“优先级调度(failover chain)”语义,但可通过 lbset 参数实现**按组设定故障转移优先级**——即:先用主集群(lbset=0),全部失效后才启用备用集群(lbset=1),再失效则切至灾备集群(lbset=2)。这是一种轻量、可靠、无需额外模块的多级容灾调度方案。
lbset 是什么?它怎么决定请求流向
lbset(load balancing set)是 BalancerMember 的可选参数,用于将后端节点划分成逻辑组。Apache 负载均衡器会**严格按 lbset 数值从小到大顺序尝试**:只在当前 lbset 内所有节点均不可用(健康检查失败且标记为 down)时,才自动降级到下一个 lbset 组。数值越小,优先级越高。
关键规则:
- 同一 lbset 内的节点仍按配置的
lbmethod(如 byrequests)轮询或加权分发 - 不同 lbset 之间是“全组不可用→才切换”的硬性隔离,不混用
- 未显式指定
lbset的节点默认属于lbset=0 - 必须配合健康检查(
status=+H)和ProxySet failonstatus=503等机制,才能准确触发降级
三层级容灾集群配置示例(主→备→灾备)
以下配置定义了一个名为 myapp-cluster 的均衡器,包含三组节点:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<proxy balancer:> # 主集群:lbset=0,高可用双节点 BalancerMember http://192.168.10.10:8080 route=node1 loadfactor=1 status=+H lbset=0 BalancerMember http://192.168.10.11:8080 route=node2 loadfactor=1 status=+H lbset=0 <h1>备集群:lbset=1,同城异地机房</h1><p>BalancerMember <a href="https://www.php.cn/link/e06549ff281b9a38e658c1e22750b816">https://www.php.cn/link/e06549ff281b9a38e658c1e22750b816</a> route=standby1 loadfactor=1 status=+H lbset=1 BalancerMember <a href="https://www.php.cn/link/3ecf70058911d495069ec09c0c8c9190">https://www.php.cn/link/3ecf70058911d495069ec09c0c8c9190</a> route=standby2 loadfactor=1 status=+H lbset=1</p><h1>灾备集群:lbset=2,异地城市,低带宽容忍</h1><p>BalancerMember <a href="https://www.php.cn/link/ed4f2064045ca72b7f2a53f052d82c55">https://www.php.cn/link/ed4f2064045ca72b7f2a53f052d82c55</a> route=dr1 loadfactor=1 status=+H lbset=2</p><h1>全局设置:启用健康检查、失败状态码触发剔除、按请求数调度</h1><p>ProxySet lbmethod=byrequests ProxySet failonstatus=500,502,503,504 ProxySet timeout=15 ProxySet maxattempts=3 </p></proxy><p>ProxyPass /app/ balancer://myapp-cluster/ ProxyPassReverse /app/ balancer://myapp-cluster/</p>
说明:
- 正常情况下,所有请求仅打向
192.168.10.x的两个主节点 - 若主集群两节点连续失败(如返回 503 或超时),Apache 自动将整个
lbset=0标记为不可用,开始向lbset=1发起请求 - 只有当
lbset=1所有节点也全部不可用时,才会启用lbset=2的灾备节点 -
maxattempts=3防止单次请求反复重试同一失败节点;timeout=15避免长尾拖慢降级判断
必须配套的关键配置项
仅设 lbset 不足以实现稳定容灾,还需激活以下机制:
-
启用健康检查模块:确保
mod_proxy_balancer和mod_slotmem_shm已加载(CentOS 中常需手动取消00-proxy.conf里slotmem_shm的注释) -
开启周期性探针:在
<proxy></proxy>外添加全局配置:ProxyBadStatus 500 502 503 504<location> SetHandler balancer-manager </location>—— 便于人工查看各 lbset 实时状态 -
后端需返回明确错误码:例如 Spring Boot 应用在熔断时主动返回
503 Service Unavailable,而非静默超时,否则 Apache 无法识别“业务级故障” -
Session 粘性需跨 lbset 一致:若使用
stickysession=JSESSIONID|route,确保所有节点(包括灾备)的jvmRoute值唯一且与route=xxx匹配,否则会话丢失
常见误区与验证要点
实际部署中容易忽略的细节:
- 误以为
lbset支持“主备同时工作”:它不是权重分流,而是严格的故障链路,lbset=1在lbset=0正常时完全不参与流量 - 忘记配置
failonstatus:默认 Apache 只根据连接失败或超时判断节点宕机,对 HTTP 5xx 响应不敏感 - 健康检查路径未暴露:建议在后端加
/health端点,并在BalancerMember后追加ping=5(每 5 秒探活) - 验证方式:手动停掉主集群全部节点 → 查看
/balancer-manager页面 → 观察 lbset=0 显示Down、lbset=1 变为Up,且应用访问持续可用










