Keepalived 与 Apache 结合通过 VIP 实现秒级故障转移:主节点运行 Apache 时 VIP 绑定其上,崩溃后 Keepalived 检测异常并自动切至备机。需同步时间、放行 VRRP(协议号 112)、关闭 SELinux、配置 Apache 监听所有接口、定义 vrrp_script 检测服务、设置 virtual_ipaddress 和 state(MASTER/BACKUP),最后验证切换与日志。

Keepalived 与 Apache 结合,本质是用 Keepalived 管理一个虚拟 IP(VIP),当主服务器上的 Apache 正常运行时,VIP 绑定在它身上对外提供服务;一旦 Apache 崩溃或主机宕机,Keepalived 检测到异常,自动将 VIP 切换到备机,由备机上的 Apache 接管流量——实现秒级故障转移。
一、基础环境准备
两台 CentOS/Ubuntu 服务器(例如 node1 和 node2),确保:
- 系统时间同步(建议配置 chrony 或 ntp)
- 关闭或配置好防火墙(Keepalived 使用 VRRP 协议,需放行协议号 112;若用 iptables,加规则:
iptables -A INPUT -p vrrp -j ACCEPT) - SELinux 设为 permissive 或 disabled(避免干扰 VIP 绑定)
- 两台机器能互相 ping 通,且未被交换机或云平台限制 VRRP 报文(公有云如 AWS/Aliyun 默认禁用 VRRP,需改用弹性 IP + 脚本方案)
二、Apache 配置要点
无需特殊修改 Apache 主配置,但建议:
- 监听所有接口(
Listen 80或Listen *:80),不要写死为 127.0.0.1 或某具体 IP - 确认 DocumentRoot 下有测试页(如 index.html),便于验证服务是否真实生效
- 可添加简单健康检查接口(如
/health返回 200),供 Keepalived 的自定义脚本调用
三、Keepalived 核心配置(主备模式)
以 node1 为主(priority 100),node2 为备(priority 90)。关键配置项说明:
-
vrrp_script:定义检测逻辑。例如检测 Apache 进程和端口:
vrrp_script chk_httpd { script "/usr/bin/pgrep -x httpd || exit 1" interval 2 weight -5 }或更稳妥地检测端口:script "curl -f http://127.0.0.1/health >/dev/null 2>&1" - track_script:把检测脚本挂到实例上,触发权重变化
-
virtual_ipaddress:指定 VIP,如
192.168.1.100/24 dev eth0(注意网卡名和子网掩码匹配实际环境) - state:主节点设为 MASTER,备节点设为 BACKUP(注意:BACKUP 模式下 priority 仍决定谁先抢 VIP,不是严格主从)
配置完成后,启动 keepalived:systemctl enable --now keepalived,用 ip a 查看 VIP 是否出现。
四、验证与排错
手动模拟故障验证切换是否及时有效:
- 在主节点执行
systemctl stop httpd,观察约 2 秒后 VIP 是否飘到备机(ip a对比) - 用浏览器或 curl 访问 VIP,确认页面始终可打开
- 查看日志:
journalctl -u keepalived -f,留意 “Transition to MASTER/BACKUP”、“Removing VIPs” 等关键行 - 常见问题:VIP 不出现 → 检查网卡名、VRRP 协议是否被拦截、keepalived 用户权限(需 root)、配置语法错误(
keepalived -t测试)
不复杂但容易忽略细节,配好后建议持续观察几天,再结合监控(如 Prometheus + Alertmanager)对 VIP 状态和 Apache 健康做告警。










