apache高可用集群需启用proxy、proxy_http、proxy_balancer、lbmethod_byrequests、headers、remoteip、slotmem_shm七模块协同工作,实现有状态感知、请求可追溯与故障收敛的智能代理层。
apache 高可用集群的核心不是堆砌模块,而是让 mod_proxy_balancer 与配套模块协同工作,形成有状态感知、请求可追溯、故障可收敛的代理层。关键在于把负载均衡从“简单分发”升级为“带上下文的智能调度”。
必须启用并验证的模块组合
只开 proxy 和 proxy_http 只能做基础反向代理;要支撑高可用集群,以下模块缺一不可:
-
proxy_balancer:提供集群定义与成员管理能力,没有它BalancerMember指令无效 -
lbmethod_byrequests(或bytraffic/bybusyness):指定具体调度算法,byrequests最常用且稳定 -
headers:注入X-Forwarded-For、X-Forwarded-Proto等头,确保后端能还原原始请求上下文 -
remoteip(强烈推荐):将X-Forwarded-For解析为REMOTE_ADDR,使日志记录、访问控制、限流策略真正生效 -
slotmem_shm:提供共享内存支持,缺失会导致/balancer-manager页面无法加载或状态不同步
Debian/Ubuntu 下执行:sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests headers remoteip slotmem_shm
启用后务必运行 apache2ctl configtest 校验语法,并用 apache2ctl -M | grep proxy 确认全部加载成功。
集群定义与健康感知配置
在 <virtualhost></virtualhost> 或独立配置段中定义带健康检查语义的集群:
- 使用
status=+H标记主动健康检查启用(需配合ProxySet的ping参数) - 设置
maxattempts=3和retry=60,避免瞬时故障导致节点被长期剔除 - 通过
loadfactor区分后端处理能力,例如大内存实例设为loadfactor=2,小实例设为1 - 添加
timeout=10和keepalive=On提升连接复用效率,降低后端建连压力
示例片段:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<proxy balancer:><br> BalancerMember http://192.168.1.10:8080 loadfactor=2 timeout=10 keepalive=On<br> BalancerMember http://192.168.1.11:8080 loadfactor=1 timeout=10 keepalive=On status=+H<br> ProxySet lbmethod=byrequests maxattempts=3 retry=60<br></proxy>
请求透传与会话粘性控制
高可用不只是转发,还要保障业务连续性:
- 用
ProxyPassReverse重写响应头中的Location、Set-Cookie,防止重定向跳转到后端地址 - 对 Java 应用启用
stickysession=JSESSIONID,并配合 Tomcat 的jvmRoute配置保证会话不丢失 - 如需无状态会话,可禁用粘性(
ProxySet stickysession=none),但需后端自身支持 session 共享(如 Redis 存储) - 通过
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}等指令,确保后端能准确判断 HTTPS 上下文
可观测性与运维支撑
生产环境必须具备实时监控和人工干预能力:
- 启用
/balancer-manager管理界面(仅限内网访问),便于手动上线/下线节点、查看实时权重与失败计数 - 配置
CustomLog记录%{BALANCER_NAME}e和%{BALANCER_ROUTE}e,实现请求路径可追踪 - 结合
mod_status输出 Apache 自身状态,与负载均衡器状态交叉比对,快速定位是代理层还是后端瓶颈 - 建议关闭
nofailover=On(默认为Off),允许故障转移;仅在强会话依赖且无法共享场景下谨慎开启









