Apache加权轮询通过loadfactor参数按权重比例动态分配请求,需启用mod_proxy、mod_proxy_http、mod_proxy_balancer和mod_slotmem_shm模块,并配合健康检查实现高可用。

Apache 负载均衡配置加权轮询(Weighted Round Robin),核心是让性能强的后端多分担请求,性能弱的少承担,避免“一刀切”式平均分配。它不是简单重复发几次再换一台,而是按权重比例动态循环调度——比如 3:1:2 的权重,每 6 个请求里,三台服务器分别拿到 3、1、2 个。
确认并启用必要模块
加权轮询依赖基础代理和负载均衡能力,必须确保以下模块已启用:
- mod_proxy:提供反向代理基础
- mod_proxy_http:支持 HTTP 协议转发(最常用)
- mod_proxy_balancer:实现集群管理与调度逻辑
- mod_slotmem_shm(必需):用于共享内存,否则健康检查和 balancer-manager 无法正常工作
验证方式(Linux):apachectl -M | grep -E 'proxy|slotmem',应看到所有模块状态为 shared。若缺失,需在 httpd.conf 或 mods-enabled 中补全 LoadModule 行。
定义带权重的后端集群
权重通过 loadfactor 参数设置,数值为相对比值,无需归一化。例如:
<Proxy balancer://api>
BalancerMember http://web1:8080 loadfactor=3
BalancerMember http://web2:8080 loadfactor=1
BalancerMember http://web3:8080 loadfactor=2
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /api/ balancer://api/
ProxyPassReverse /api/ balancer://api/
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- web1 将接收约 50% 请求(3 ÷ (3+1+2) = 3/6),web2 约 17%,web3 约 33%
-
lbmethod=byrequests显式声明轮询算法,推荐写明,便于维护和后续扩展 - 权重可参考硬件资源粗略估算:如以 4C8G 为基准(值=32),8C16G 可设为 64,再适当上浮留余量(如设为 3)
-
loadfactor=0表示该节点仅作热备,不参与常规调度
加入健康检查提升可靠性
加权只是静态分配,节点宕机或过载时仍会继续转发。必须配合健康探测自动摘除异常节点:
- 添加
ping=5:每 5 秒发送 HEAD 请求探测存活 - 添加
retry=60:节点失败后 60 秒内不再分发请求 - 若后端提供
/health接口,可用更精准的主动检查:BalancerMember http://web1:8080 loadfactor=3 ping=5 retry=60 hcmethod=GET hcuri="/health" failonstatus=503
这样,即使 web1 权重最高,一旦健康检查失败,它会立即被剔出调度池,流量自动转向其余健康节点。
验证与调试建议
配置完成后重启 Apache(systemctl restart apache2 或 apachectl -k restart),然后:
- 访问
/balancer-manager(需提前配置访问权限),实时查看各节点状态、权重、当前请求数及是否启用健康检查 - 用 curl 或浏览器连续发起多次请求,观察后端 access log 中各服务器接收请求的比例是否接近预设权重
- 手动停掉某台后端服务,确认其状态变为 DOWN,且请求自动绕过该节点
加权轮询不复杂,但容易忽略健康检查和共享内存模块这两个关键支撑点。

















