apache mod_proxy_balancer默认使用轮询(round robin)调度,只需启用mod_proxy、mod_proxy_balancer和mod_proxy_http模块,并配置及balancermember,显式设置lbmethod=byrequests更规范;未设loadfactor时权重均为1,支持加权轮询与ping/retry健康检查,可通过/balancer-manager实时验证。

Apache mod_proxy_balancer 默认就使用轮询(Round Robin)调度,只需启用模块并正确定义后端节点,无需额外算法声明也能生效。但为明确意图、便于维护和后续扩展,建议显式配置 lbmethod=byrequests。
基础配置与模块启用
确保以下模块已加载(通常在 httpd.conf 或 conf.modules.d/ 中):
-
mod_proxy:提供代理基础能力 -
mod_proxy_balancer:实现负载均衡逻辑 -
mod_proxy_http:用于转发 HTTP/HTTPS 请求(最常用)
检查命令:apachectl -M | grep proxy,应看到上述三项均处于 shared 状态。
定义轮询集群与后端节点
在虚拟主机或主配置中添加如下结构:
<proxy balancer:>
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/
说明:
- 每个
BalancerMember对应一台后端服务器,地址需可被 Apache 访问 -
ProxySet lbmethod=byrequests显式启用轮询,是推荐写法 - 未设
loadfactor时,默认权重均为 1,请求严格按顺序循环分发
加入权重的轮询(加权轮询)
当后端服务器性能不一致(如 CPU、内存差异大),可通过 loadfactor 调整分发比例:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
BalancerMember http://s1:8080 loadfactor=3BalancerMember http://s2:8080 loadfactor=1BalancerMember http://s3:8080 loadfactor=2
此时请求将按 3:1:2 的比例分配,Apache 内部按权重累计计数实现轮询,不是简单重复三次再切一次。
增强可用性:健康检查与故障转移
轮询本身不感知节点状态,必须配合健康检查才能自动剔除故障节点:
- 添加
ping=5:每 5 秒向后端发送 HEAD 探测(单位秒) - 添加
retry=60:节点失败后 60 秒内不再分发请求 - 添加
status=+H:标记为热备节点(仅当其他节点全宕时启用)
示例:
BalancerMember http://10.0.1.10:8080 loadfactor=2 ping=5 retry=60 BalancerMember http://10.0.1.11:8080 loadfactor=1 ping=5 retry=60 status=+H
验证与调试方法
启用 balancer-manager 可视化界面,实时查看调度效果:
<location>
SetHandler balancer-manager
Require ip 127.0.0.1
Require ip 192.168.1.0/24
</location>
访问 http://your-apache/balancer-manager,可观察各节点的“Elected”(被选中次数)、“Current Requests”(当前处理请求数)及状态(OK/ERR/DOWN)。









