lbset是BalancerMember的整数优先级参数,Apache按lbset=0→1→2逐级启用节点,需显式声明、配合健康检查和合理retry值实现主备容灾调度。

在 Apache 中实现集群成员的优先级调度,核心是使用 mod_proxy_balancer 模块中的 lbset 参数,而不是 ProxyPass 本身——ProxyPass 只负责把请求转发给已定义的负载均衡器,真正的优先级分层逻辑由 BalancerMember 的 lbset 值控制。
理解 lbset 的层级逻辑
lbset 是一个整数标签,代表“负载集”(load balancing set)的优先级序号。Apache 严格按数值从小到大启用节点组:
- 只在
lbset=0组内有健康节点时,才将请求分发给它们; - 当该组所有成员均被标记为不可用(如健康检查失败、超时、retry 时间未过),才会尝试
lbset=1组; - 依此类推,
lbset=2是灾备层,仅当前两层全失效时启用; - 未显式写
lbset的节点,默认属于lbset=0,容易误判层级,务必显式声明。
配置主备或多级容灾集群
以三层级为例(主→热备→异地灾备),需在 <VirtualHost> 内完整定义均衡器(不能放全局配置顶层):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<Proxy balancer://prod>
BalancerMember http://10.0.1.10:8080 lbset=0 retry=10 hcmethod=GET hcuri=/health hcinterval=5
BalancerMember http://10.0.1.11:8080 lbset=0 retry=10 hcmethod=GET hcuri=/health hcinterval=5
BalancerMember http://10.0.2.10:8080 lbset=1 retry=30 hcmethod=GET hcuri=/health hcinterval=10
BalancerMember http://10.0.3.10:8080 lbset=2 retry=300 hcmethod=GET hcuri=/health hcinterval=30
</Proxy>
ProxyPass / balancer://prod/
ProxyPassReverse / balancer://prod/
关键点:
-
retry控制节点故障后多久重新探测:主层设短(10s),热备中等(30s),灾备拉长(300s),避免抖动误切; - 必须启用健康检查(
hcmethod+hcuri),否则 Apache 无法自动识别节点失效,lbset 降级不会触发; - 确保已加载模块:
mod_proxy、mod_proxy_balancer、mod_proxy_http、mod_slotmem_shm、mod_proxy_hcheck(2.4.43+)。
验证与日常观察
配置生效后,不能只看语法是否通过,要确认运行时行为:
- 访问
/balancer-manager页面(需开启并授权),查看各成员的lbset值和Status列(OK/ERR); - 临时停掉所有
lbset=0节点,发起请求,确认响应来自lbset=1地址; - 观察
Elected计数:正常时只有lbset=0成员被选中,降级后lbset=1计数开始增长。
常见误区提醒
几个容易出错的地方:
- 误以为 ProxyPass 支持 lbset —— 它不支持,必须通过
<Proxy balancer://xxx>+BalancerMember实现; - 漏配健康检查参数,导致节点宕机后仍被轮询,lbset 不会自动切换;
- 把均衡器定义写在全局配置里,虚拟主机内无法复用,应放在
<VirtualHost>内或用Include引入; - 混用
nofailover=On和多级 lbset —— 后者依赖故障转移机制,设为 On 会阻断降级行为。

















