apache高可用架构通过vip漂移、健康检查和优雅终止实现无感切换:keepalived基于vrrp管理vip,vrrp_script联动apache状态,维护时先降权再graceful-stop,切换后验证服务并预留回滚方案。

Apache 高可用架构中不直接管理物理服务器资源切换,它本身是无状态的 Web 服务进程,资源切换必须由外部组件协同完成。核心思路是:**用 VIP 屏蔽物理节点变化,用健康检查驱动流量重定向,用优雅终止保障连接不丢**。
用 Keepalived 实现 VIP 的自动漂移
Keepalived 通过 VRRP 协议让多台 Apache 服务器共享一个虚拟 IP(VIP),客户端只访问 VIP,不感知后端物理机:
- 在主节点配置高优先级(如 100),备节点设为 90;主节点正常时独占 VIP 并发送 VRRP 组播报文
- 当主节点宕机或网络中断,备节点收不到通告超时后自动升为 Master,绑定 VIP 并发免费 ARP 刷新下游设备缓存
- 确保所有节点在同一二层网络,禁用防火墙对 224.0.0.18 的拦截,VRID 和认证密码必须完全一致防脑裂
用 vrrp_script 联动 Apache 进程状态
VIP 切换不能只看机器存活,更要判断 Apache 是否真能提供服务:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 编写检测脚本(如 curl -s http://127.0.0.1/health | grep "ok"),返回非零即失败
- 在 keepalived.conf 中定义:vrrp_script chk_http { script "/path/to/check.sh" interval 3 fall 2 rise 2 }
- 将脚本绑定到 VRRP 实例,并设置权重变化(如失败时本机 priority -30),使故障 Apache 主动降级,触发 VIP 切换
物理节点重启或维护时的平滑过渡
避免“先停 Apache 再切 VIP”导致请求丢失,应让流量先排空再释放资源:
- 维护前,临时修改健康检查脚本返回失败,或直接在 keepalived 中执行 killall -USR1 keepalived 降低本机优先级
- 等待 2–3 个 VRRP 通告周期(默认 1 秒),确认 VIP 已漂移到备机、且旧节点 access_log 中 active connections 归零
- 再执行 apachectl graceful-stop(而非 stop),让正在处理的请求自然结束,子进程退出后主进程才终止
切换后验证与回滚准备
资源切换不是终点,而是保障连续性的起点:
- 用 ip addr show 确认 VIP 所在节点;用 curl -I http://VIP/health 验证响应是否 200
- 检查新主节点 error_log 是否有模块加载失败、PHP-FPM 连接超时等异常
- 保留原主节点的 Apache 配置快照和启动脚本,一旦新主异常,可快速恢复原节点并手动提升优先级抢回 VIP










