apache可通过mod_proxy与mod_proxy_balancer构建高可用反向代理负载均衡器,关键在于启用proxy、proxy_http、proxy_balancer、lbmethod_byrequests、status及slotmem_shm模块,配置带ping/retry的balancermember、proxypass路径映射、stickysession会话保持及/balancer-manager管理界面。

Apache 本身不是专用负载均衡器,但通过 mod_proxy 和 mod_proxy_balancer 模块,可以构建轻量、可控的反向代理型负载均衡层,有效分发请求、避免单点过载,从而提升整体系统吞吐量。
启用并配置核心代理模块
确保 Apache 已加载必要模块:mod_proxy、mod_proxy_http、mod_proxy_balancer 和 mod_slotmem_shm(用于共享会话状态)。在配置中启用方式如下:
- 检查
a2enmod proxy proxy_http proxy_balancer slotmem_shm(Debian/Ubuntu)或确认LoadModule行未被注释(RHEL/CentOS) - 禁用
ProxyRequests Off,防止 Apache 被用作开放代理 - 启用
ProxyPreserveHost On,保留原始 Host 头,便于后端日志与路由识别
定义后端服务器池与调度策略
吞吐量提升依赖于合理分配请求。Apache 提供多种 balancer 调度算法,需根据后端特性选择:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- byrequests(默认):按请求计数轮询,适合处理时长较均匀的服务
- bytraffic:按字节流量加权,适合响应体大小差异大的场景(如含大文件下载)
- bybusyness:优先转发给当前活跃连接最少的节点,对突发短连接更友好
- 为每个
BalancerMember设置loadfactor和maxattempts,例如:BalancerMember http://192.168.1.10:8080 loadfactor=3 maxattempts=3
启用健康检查与故障自动剔除
无感知的故障节点会持续拖慢响应、降低有效吞吐。Apache 支持被动和主动健康检查:
- 被动检查:通过
retry=60(单位秒)设定故障节点重试间隔,失败后暂时剔除 - 主动检查:添加
ping=5(每5秒发一次 HEAD 探针)或healthcheck=/health(指定路径),配合后端返回 200 判断存活 - 结合
status=+disabled可手动下线节点,运维干预更灵活
优化连接复用与超时设置
频繁建连/断连是吞吐瓶颈常见原因。Apache 代理层需精细控制连接生命周期:
- 设置
ProxySet keepalive=On并启用KeepAliveTimeout(建议 5–15 秒),复用后端 HTTP 连接 - 调整超时参数:
timeout=30(代理总超时)、connectiontimeout=5(建连超时)、retry=30(故障恢复等待) - 避免后端因长连接堆积导致资源耗尽,可限制每个后端最大空闲连接数:
max=200 smax=50









