Apache负载均衡默认轮询需启用mod_proxy、mod_proxy_balancer、mod_proxy_http三模块;配置时须显式设lbmethod=byrequests,并可加loadfactor实现加权轮询及ping/retry实现健康检查。

Apache 负载均衡默认就是轮询(Round Robin),但要真正生效,得配对模块、写对结构、设对参数——缺一不可。光靠“默认”两个字,往往跑不起来。
模块必须启用
轮询功能依赖三个核心模块,缺一不可:
- mod_proxy:提供反向代理基础能力
- mod_proxy_balancer:实现负载均衡逻辑(含调度算法)
- mod_proxy_http:转发 HTTP 请求(最常用,如后端是 Web 应用)
检查是否已加载:运行 apachectl -M | grep proxy,输出中应包含 proxy_module、proxy_balancer_module 和 proxy_http_module,状态为 shared。没看到?需在 httpd.conf 或 conf.modules.d/ 中取消对应 LoadModule 行的注释。
配置轮询集群
在虚拟主机或主配置中定义一个 balancer 集群,关键点是显式指定 lbmethod=byrequests:
<Proxy balancer://myapp>
BalancerMember http://10.0.1.10:8080
BalancerMember http://10.0.1.11:8080
BalancerMember http://10.0.1.12:8080
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 每个
BalancerMember是一台可访问的后端服务器 - 未设
loadfactor时,所有节点权重为 1,请求严格按顺序循环分发(1→2→3→1→…) -
ProxySet lbmethod=byrequests是推荐写法,明确意图,避免后续维护歧义
加权轮询(按性能分配)
后端机器性能不均时,用 loadfactor 调整比例。例如:
BalancerMember http://s1:8080 loadfactor=3BalancerMember http://s2:8080 loadfactor=1BalancerMember http://s3:8080 loadfactor=2
实际分发比例为 3:1:2,Apache 内部按累计权重轮询,不是简单重复三次再切一次。总权重为 6,每 6 个请求中,s1 得 3 个、s2 得 1 个、s3 得 2 个。
加上健康检查才可靠
纯轮询不检查后端是否存活,故障节点仍会收请求。必须加探测机制:
-
ping=5:每 5 秒发一次 HEAD 探测(单位秒) -
retry=60:节点失败后,60 秒内不再转发请求 -
status=+H:标记为热备节点(仅当其他全宕时启用)
完整示例:
<Proxy balancer://myapp>
BalancerMember http://10.0.1.10:8080 ping=5 retry=60
BalancerMember http://10.0.1.11:8080 ping=5 retry=60
ProxySet lbmethod=byrequests
</Proxy>
配置完重启 Apache(apachectl -k restart),再访问 /balancer-manager 页面可实时查看节点状态和请求计数。

















