apache本身不支持主备热切换,需依赖keepalived(vip漂移)、haproxy(健康检查与连接排空)等上层组件实现高可用,配合轻量健康接口、配置同步及全链路验证。

1. 选对主备控制器,别指望 Apache 自己切
推荐组合(按成熟度与轻量级排序):
-
Keepalived + VIP 漂移:最贴近网络层,适合纯 Apache 静态服务或反向代理场景;通过真实 HTTP 探活(如
curl -f http://127.0.0.1/health)判断 Apache 是否真活,不是只看进程是否存在 -
HAProxy 作前端 LB:更适合动态应用,支持连接排空(draining)、细粒度健康检查(
option httpchk GET /health)、自动屏蔽 Down 节点,无需 VIP,直接 DNS 或 IP 访问即可 - 云厂商负载均衡(如阿里云 SLB、AWS ALB):免运维,但需确保后端 Apache 暴露可靠健康接口,且安全组放行检查端口
不推荐仅靠 mod_proxy_balancer 或 mod_proxy_hcheck 实现主备:它们能摘除故障节点,但无法控制“谁是主、谁是备”的角色绑定,也不处理 VIP、ARP、会话延续等关键问题。
2. Apache 必须暴露轻量、可靠的健康接口
这是所有上层组件做决策的基础。不能依赖 /server-status(需权限、开销大、易误判),建议用静态文件方式:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 创建
/var/www/html/health,内容仅为OK - 在 Apache 配置中添加别名:
Alias /health /var/www/html/health,并限制访问:<location> Require all granted </location> - 验证命令:
curl -sI http://127.0.0.1/health | grep "200 OK",必须稳定返回 200 - 确保 SELinux 和防火墙不拦截(
semanage port -a -t http_port_t -p tcp 80若需自定义端口)
3. 主备节点配置必须严格一致
Keepalived 或 HAProxy 只管流量调度,不管内容。若主备 Apache 提供不同页面、证书路径错误、SSL 配置不一致,切换后用户会看到 404、证书警告甚至 500 错误:
- 使用
rsync或Ansible同步/etc/httpd/conf/、/etc/httpd/conf.d/*.conf全量配置 - 静态资源目录(如
/var/www/html)建议挂载同一 NFS,或用 inotify + rsync 实时同步 - SSL 证书、密钥文件路径、权限(
600for key,644for cert)主备完全相同 - 禁用
ExtendedStatus On:该状态不跨节点同步,切换后显示为空或异常,属正常现象,不必强求一致
4. 切换验证不能只看 VIP 是否漂移
真正有效的热切换,要验证整条链路是否通:
-
网络层:VIP 是否可 ping、端口 80/443 是否监听(
nc -zv vip 80) -
服务层:健康接口返回 200(
curl http://vip/health) -
业务层:模拟真实请求(
curl -I https://yourdomain.com),检查HTTP/1.1 200、响应头、关键 HTML 字符串(如grep "Welcome") -
日志层:备用节点
access_log是否有新请求、error_log无大量 PHP/模块报错 - 客户端侧:用浏览器或 curl 多次访问,确认无连接重置、无 502/504、无长延迟
不复杂但容易忽略










