apache代理在集群内流量调度的核心是mod_proxy_balancer配合健康检查与合理算法,而非简单转发;它只负责本集群内基于健康状态、空闲度或业务特征的智能分发,不参与跨机房决策。

Apache 代理在集群内部做流量调度,核心是用 mod_proxy_balancer 搭配健康检查和合理算法,不是简单转发,而是让请求“聪明地”落到合适的后端节点上。它不负责跨机房决策,只管本集群内谁更健康、谁更空闲、谁更适合当前请求。
启用关键模块并定义均衡组
先确保这三个模块已加载:mod_proxy(基础代理)、mod_proxy_http(HTTP 协议支持)、mod_proxy_balancer(负载逻辑)。验证方式:
- Linux(Debian/Ubuntu):运行
a2enmod proxy proxy_http proxy_balancer,再重启服务 - RHEL/CentOS:检查
/etc/httpd/conf.modules.d/00-proxy.conf中对应LoadModule行未被注释
然后声明一个命名均衡组,例如:
<proxy balancer:>
BalancerMember http://10.0.2.10:8080 route=app1 loadfactor=3
BalancerMember http://10.0.2.11:8080 route=app2 loadfactor=1
ProxySet lbmethod=bybusyness
</proxy>
注意:必须用 balancer:// 前缀,否则 Apache 当作普通代理,不触发负载逻辑。
配置主动健康检查,避免请求打到宕机节点
默认 Apache 不探测后端是否存活,靠连接失败被动下线,延迟高、体验差。推荐启用主动探测:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 若 Apache ≥ 2.4.43,用
mod_proxy_hcheck(更精准):BalancerMember http://10.0.2.10:8080 hcmethod=GET hcinterval=10 hcuri=/actuator/health hcfail=3 hcpass=2 - 旧版本可用
ping参数做 TCP 层探测:BalancerMember http://10.0.2.10:8080 ping=5(单位秒,表示建连超时)
所有后端需暴露统一健康接口(如 Spring Boot 的 /actuator/health),且返回 HTTP 200 才算健康。
按业务需要选对调度算法
不同场景适合不同策略,不用硬套轮询:
- byrequests:适合后端性能一致、响应时间稳定,比如静态资源或轻量 API
- bytraffic:适合返回体差异大(如报表 vs 状态查询),按字节数加权分配
- bybusyness:适合短连接高并发或处理耗时不均的场景,Apache 实时跟踪每个节点活跃连接数,选最空闲的
-
stickysession:若微服务还依赖本地 session(如 JSESSIONID),加这句:
ProxySet stickysession=JSESSIONID|jsessionid,并确保后端响应中含Set-Cookie: JSESSIONID=xxx; Path=/
暴露管理界面,便于实时观测与人工干预
加上这个配置,就能通过浏览器访问 /balancer-manager 查看各节点状态、手动启停成员、调整权重:
<location>
SetHandler balancer-manager
Require ip 10.0.0.0/16 # 限制内网访问
</location>
配合 mod_status 或自定义脚本,还可把本集群健康状态上报给上层 GSLB 系统,实现故障自动切流。









