Keepalived 实现秒级故障转移,依赖 VRRP 协议选举主备、健康检查判定业务可用性、VIP 漂移完成无感切换;不代理流量,仅通过优先级调整与 ARP 刷新实现高可用。

Keepalived 实现业务服务故障转移,核心靠的是 VRRP 协议 + 健康检查 + VIP 漂移 三者协同。它不代理流量,也不处理业务逻辑,而是作为一个“守门人”,持续观察服务状态,并在异常时快速切换对外服务的入口地址(即虚拟 IP)。
VRRP 协议驱动主备角色自动选举
Keepalived 基于标准 VRRP 协议构建主备关系:
- 所有参与节点配置相同的
virtual_router_id,组成一个逻辑上的“虚拟路由器”; - 每个节点设置不同
priority(如 Master=100,Backup=90),优先级高者成为 Master; - Master 定期(默认每秒)向局域网发送 VRRP 通告包(多播地址 224.0.0.18);
- Backup 节点监听这些通告,若连续 3 秒未收到(由
advert_int和fail_count决定),即判定 Master 失联,触发接管流程。
健康检查决定是否真正“该切”
仅靠网络层心跳不够——服务器在线 ≠ 业务可用。Keepalived 支持多种健康检查方式:
- TCP 端口探测:检查 Nginx、Tomcat 等服务端口是否响应;
- HTTP GET 请求:验证返回状态码是否为 200;
- 自定义脚本:比如
curl -s http://localhost/health | grep "ok",或检测数据库连接、进程是否存在; - 检查失败达到阈值后,Keepalived 会主动降低自身优先级(甚至设为 0),强制让 Backup 接管 VIP。
VIP 漂移完成用户无感切换
虚拟 IP(VIP)是对外暴露的统一入口,例如 192.168.1.100 或云平台预留公网 IP:
- Master 正常时,VIP 绑定在其网卡上(如
eth0:1),所有流量直达该节点; - 故障触发后,Backup 在 1–3 秒内执行
ip addr add将 VIP 添加到本地接口,并启动 ARP 刷新(arping),通知交换机/网关更新 MAC 映射; - 用户后续请求发往 VIP,自然落到新 Master 上,旧 Master 即使恢复也不会抢回 VIP(除非启用
preempt并配置合理延迟)。
配置关键点提醒
- 网卡名必须准确(
interface eth0不能写错,云环境可能为ens3或enp0s3); - 认证密码
auth_pass主备必须一致,且长度建议 8 字符以内(部分版本限制); - 云平台需确认是否支持免费 ARP 和多播——若不支持,可改用单播模式(
unicast_src_ip+unicast_peer); - 生产环境推荐
nopreempt+ 双state BACKUP,避免主恢复后反复切换造成抖动。
整个过程无需修改应用代码,不引入额外中间件,只要两台机器能互通、服务可被探测,就能实现真正的秒级自动容灾。

















