byrequests是Apache默认轮询算法,需显式加载mod_lbmethod_byrequests等模块,配置BalancerMember并用ProxySet lbmethod=byrequests指定,配合ping、retry等参数实现健康检查与故障转移。

直接启用 byrequests 算法就能实现请求级公平分发,它是 Apache 负载均衡的默认策略,原理简单、开销低、适合性能相近的后端服务器。
确认并加载必要模块
byrequests 依赖 mod_lbmethod_byrequests,必须显式启用。其他基础代理模块也缺一不可:
-
mod_proxy和mod_proxy_http:负责反向代理转发 -
mod_proxy_balancer:提供负载均衡框架 -
mod_lbmethod_byrequests:实现轮询逻辑(不是默认内置,需手动加载) -
mod_slotmem_shm:推荐启用,用于 balancer-manager 状态共享和故障恢复
在配置文件(如 httpd.conf 或 /etc/apache2/mods-enabled/*.load)中检查或添加:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
定义集群并指定 byrequests 策略
在 <virtualhost></virtualhost> 或全局配置中声明 balancer 集群,并用 ProxySet lbmethod=byrequests 明确设定算法:
<Proxy balancer://myapp>
BalancerMember http://192.168.1.10:8080 route=app1
BalancerMember http://192.168.1.11:8080 route=app2
BalancerMember http://192.168.1.12:8080 route=app3
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/
注意:route 参数虽非必需,但建议设置,便于后续启用会话保持(stickysession)或调试追踪。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
验证与调优关键参数
byrequests 本身不自动感知后端健康状态,需配合被动健康检查提升鲁棒性:
- 加
ping=5让 Apache 每 5 秒发一次轻量 OPTIONS 请求探测存活 - 设
retry=60表示故障节点 60 秒内不再派发请求 - 用
maxattempts=3控制单次请求最多重试 3 次(避免雪崩)
完整示例片段:
<Proxy balancer://myapp>
BalancerMember http://192.168.1.10:8080 route=app1 ping=5 retry=60 maxattempts=3
BalancerMember http://192.168.1.11:8080 route=app2 ping=5 retry=60 maxattempts=3
BalancerMember http://192.168.1.12:8080 route=app3 ping=5 retry=60 maxattempts=3
ProxySet lbmethod=byrequests
</Proxy>
启用管理界面辅助观察
临时开启 balancer-manager 可直观查看当前请求数分配是否均匀:
<Location "/balancer-manager">
SetHandler balancer-manager
Require ip 127.0.0.1
Require ip 192.168.1.0/24
</Location>
访问 http://your-balancer/balancer-manager,观察各 BalancerMember 的 “Current Requests” 列——理想情况下应随请求持续增长且差值很小,说明 byrequests 正常工作。

















