Apache自身不支持虚拟IP漂移,该功能由Keepalived等HA软件基于VRRP实现;其通过健康检查、GARP广播和外置存储保障服务高可用与数据一致。

Apache本身不直接提供虚拟IP(VIP)漂移功能,它是一个Web服务器,不具备集群高可用(HA)层面的IP地址管理能力。所谓“Apache主备模式下的虚拟IP漂移”,实际是将Apache部署在高可用集群环境中(如Keepalived、Heartbeat、Pacemaker等),由这些HA软件负责VIP的监控与切换,Apache仅作为被托管的服务之一参与故障转移。
虚拟IP漂移依赖外部高可用软件
真正实现VIP漂移的是Keepalived这类工具,而非Apache自身。其核心机制基于VRRP(Virtual Router Redundancy Protocol)协议:
- 主节点(Master)和备节点(Backup)共同监听同一个虚拟IP(如192.168.1.100)
- Master周期性发送VRRP通告报文,Backup持续监听;一旦Backup在超时时间内未收到通告,即判定Master宕机
- Backup立即接管VIP:通过ARP广播宣告“该VIP现由本机响应”,并启动本地Apache服务(若未运行)
- 客户端后续请求发往VIP,经ARP更新后自动路由至新Master节点
Apache需配合做服务级健康检查
仅靠网络层心跳(如ICMP ping)不足以保障业务可用。Keepalived通常配置HTTP级检测,确保Apache进程真实可服务:
- 定义一个check script,定期用curl访问Apache本地URL(如http://127.0.0.1/health)
- 返回HTTP 200且响应体含预期字符串才视为健康;否则触发权重下调或强制切换
- Apache需提供轻量健康接口(可用mod_rewrite或简单PHP/Python脚本实现)
ARP刷新与连接中断处理是关键细节
VIP切换后,客户端和中间设备(如交换机、路由器)的ARP缓存可能仍指向旧MAC地址,导致短暂通信失败:
- Keepalived在接管VIP时会主动发送GARP(Gratuitous ARP)包,强制刷新局域网内ARP表
- 但跨子网或存在三层设备时,需额外配置静态ARP或启用arp_ignore/arp_announce内核参数
- 已建立的TCP连接不会自动迁移,用户会感知到短时中断(通常几秒),这是主备架构固有特性
数据一致性与共享存储需独立保障
Apache本身无状态,但实际业务常依赖文件(如上传目录)、数据库或会话数据:
- VIP漂移不解决后端数据同步问题;静态资源建议挂载NFS/GlusterFS,或使用对象存储
- 动态内容(如session)应外置到Redis、Memcached或数据库,避免本地文件导致主备不一致
- 配置文件(httpd.conf、vhosts)需通过Ansible、Git同步或配置中心统一管理,确保主备一致










