byrequests是apache默认负载均衡算法,按请求计数轮询分发,需启用mod_lbmethod_byrequests模块,显式配置lbmethod=byrequests,并结合loadfactor、maxattempts、ping等参数及会话保持、真实ip透传提升公平性。

byrequests 是 Apache 负载均衡的默认算法,它按请求计数轮询分发,不依赖实时状态,轻量、确定性强,适合后端服务器性能相近、无显著响应时延差异的场景。配置本身简单,但要真正实现“请求级公平”,需注意模块启用、权重协同、健康检查与会话一致性等细节。
确认并启用必要模块
byrequests 算法由 mod_lbmethod_byrequests 提供,必须显式加载。仅启用 mod_proxy_balancer 不足以支持该算法。
- 检查是否已加载:
apachectl -M | grep lbmethod_byrequests,若无输出需启用 - Ubuntu/Debian:运行
sudo a2enmod lbmethod_byrequests,再sudo systemctl restart apache2 - RHEL/CentOS:确保已安装
mod_lbmethod_byrequests包(如httpd-mod_lbmethod_byrequests),并在httpd.conf中添加:LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so - 务必同时启用
mod_slotmem_shm,否则 balancer-manager 状态页无法工作,影响运维可观测性
基础集群配置与byrequests启用
在虚拟主机或主配置中定义负载集群,并明确指定 lbmethod=byrequests。即使它是默认值,也建议显式声明,避免因模块加载顺序或版本差异导致行为隐式变更。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 route=node1
BalancerMember http://192.168.1.11:8080 route=node2
BalancerMember http://192.168.1.12:8080 route=node3
ProxySet lbmethod=byrequests
</proxy>
ProxyPass /app balancer://myapp/
ProxyPassReverse /app balancer://myapp/
说明:
- 每个
BalancerMember地址应为后端真实服务地址(可含端口),不建议用 localhost(除非同机部署) -
route=xxx用于后续配置 sticky session,此处先预留,便于扩展 -
ProxySet lbmethod=byrequests必须写在<proxy></proxy>块内,作用于整个集群
提升公平性的关键参数调优
纯 byrequests 本身不感知后端负载,但可通过以下参数增强实际分配的合理性:
-
loadfactor:为节点设置整数权重(默认为 1)。例如:
BalancerMember http://node1:8080 loadfactor=2表示该节点接收约 2 倍于 loadfactor=1 节点的请求数。适用于 CPU 或内存明显更强的机器 -
maxattempts 和 retry:配合被动健康检查使用。例:
BalancerMember http://node1:8080 maxattempts=2 retry=60,表示连续失败 2 次后,60 秒内不再分发请求,避免将请求持续打向异常节点破坏公平性 -
ping:启用轻量探测,如
BalancerMember http://node1:8080 ping=5,每 5 秒发一次 OPTIONS 请求验证连通性,及时剔除离线节点
保障应用层公平:会话与真实IP处理
请求级公平不仅指分发数量均等,更要求用户上下文不被割裂:
-
会话保持(Sticky Session):若后端未共享 session 存储(如 Redis),需开启粘性路由。添加
stickysession=ROUTEID并配合 Cookie 设置:Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/; HttpOnly" env=BALANCER_ROUTE_CHANGED -
透传真实客户端IP:后端日志和限流依赖真实 IP。确保启用
mod_remoteip,并在 Proxy 配置中添加:RemoteIPHeader X-Forwarded-For
同时在ProxyPass前加入:RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e"









