apache用byrequests算法实现轮询分发,核心是启用mod_proxy_balancer及mod_lbmethod_byrequests等必需模块,并在块中显式声明proxyset lbmethod=byrequests,按请求数逐一分配,不依赖响应时间或流量,适合后端性能均衡场景。

Apache 用 byrequests 算法实现轮询分发,核心是启用 mod_proxy_balancer 和对应调度模块,并在 <proxy></proxy> 块中显式声明 lbmethod=byrequests。它按收到的请求数逐一分配,不依赖响应时间或流量大小,适合后端处理能力较均衡的场景。
基础配置必须项
缺一不可,否则轮询不生效或报错:
-
启用必要模块:确保以下模块已加载(检查
httpd -M | grep -E 'proxy|lbmethod|slotmem')mod_proxy、mod_proxy_http、mod_proxy_balancer、mod_lbmethod_byrequests、mod_slotmem_shm(共享内存必需,否则 balancer-manager 无法工作) -
关闭正向代理:
ProxyRequests Off必须存在,防止被滥用为开放代理 -
明确指定算法:即使
byrequests是默认值,也建议写明ProxySet lbmethod=byrequests,增强可读性和后续扩展性
定义集群与节点权重
在 <proxy balancer:></proxy> 内配置后端服务:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 每个
BalancerMember地址后可加loadfactor=N设置权重(如loadfactor=2表示承担双倍请求量) - 权重值无绝对标准,可参考硬件资源粗略估算:4C8G 设为 1,8C16G 可设为 2 或 3,留一定余量更稳妥
- 若某节点仅作热备,设
loadfactor=0,它不会参与常规调度,仅在其他节点全宕时启用
转发规则与关键参数
完成集群定义后,用 ProxyPass 绑定入口路径:
-
ProxyPass / balancer://mycluster/—— 将根路径所有请求交给集群 -
ProxyPassReverse / balancer://mycluster/—— 改写后端返回的Location、Set-Cookie等响应头,避免跳转失败或会话丢失 - 推荐补充容错参数:
maxattempts=2(单次请求最多尝试 2 个节点)、timeout=30(连接超时 30 秒),防止单点卡死拖慢整体
验证轮询是否真实生效
别靠浏览器反复刷新判断——Keep-Alive 和缓存会干扰结果:
- 测试时临时加请求头:
curl -H "Connection: close" -sI http://your-proxy/ | grep X-Backend(需后端主动写入标识头) - 启用
mod_status并访问/balancer-manager,观察各节点 “Current Requests” 计数是否随请求逐次递增 - 确保健康检查已开启(如
ping=5 retry=60),否则节点宕机后仍会继续转发,轮询就失去意义









