apache限制负载均衡节点并发请求数,核心是通过balancermember的max/min/acquire参数或proxyset的maxconnections/ttl/timeout统一控制空闲连接数与活跃连接生命周期,并依赖mod_slotmem_shm共享状态确保跨进程一致性。

为每个后端节点单独设置连接上限
这是最常用、最精细的方式。在定义 `BalancerMember` 时直接指定连接参数:- max=N:该节点最多保持 N 个空闲连接(即连接池容量上限),超出后新请求需等待或排队
- min=M:始终预热维持 M 个活跃连接,减少首次请求延迟
- acquire=毫秒:当连接池耗尽时,客户端最多等待指定毫秒数获取连接;超时则返回 503 错误
- retry=秒:节点被标记为失效后,在该秒数内不转发请求(常配合健康检查使用)
<proxy> BalancerMember http://192.168.1.101:8080 max=20 min=2 acquire=1500 BalancerMember http://192.168.1.102:8080 max=40 min=4 acquire=2500 retry=60 ProxySet lbmethod=bybusyness </proxy>
对整个负载均衡集群统一设限
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- maxconnections=N:集群级硬性上限,所有节点到后端的并发连接总和不得超过 N(优先级高于各节点的 max)
- ttl=秒:空闲连接最长存活时间,超时自动关闭,防止长连接堆积
- timeout=秒:代理向后端发起请求后,等待响应的超时阈值
<proxy> BalancerMember http://192.168.1.101:8080 BalancerMember http://192.168.1.102:8080 ProxySet maxconnections=80 ttl=300 timeout=8 </proxy>
确保底层状态同步机制启用
连接池状态需跨 worker 进程共享,否则每个进程独立维护会导致实际连接数失控。必须启用以下模块:- mod_slotmem_shm(推荐):基于共享内存同步连接状态
- mod_proxy_balancer:提供负载均衡基础能力
- mod_proxy_http(或其他协议模块):实际转发请求
验证配置是否生效
不能只看配置是否加载成功,要实测连接态:- 用 `ab -n 100 -c 30 http://your-balancer/` 发起并发请求
- 在 Apache 服务器上执行:
ss -tn dst <backend-ip>:8080 | grep ESTAB | wc -l</backend-ip>
查看实际建立的到某后端的 ESTABLISHED 连接数是否接近设定值 - 观察 `mod_status` 页面中 `proxy balancer` 区域的 `Busy` / `Idle` 连接统计









