## 是什么与原理
keepalived 基于 VRRP 协议实现地址漂移:两台机器配同一个虚拟 IP(VIP),一主一备,主机器定期广播心跳通告;备机收不到通告就认为主机故障,接管 VIP,对外的服务地址不变,流量自动切到备机。整个切换在秒级完成,客户端无感。它解决的是单点问题:前端入口、负载均衡层这类必须高可用的位置,两台顺云云服务器加 keepalived 就能撑起一套主备。
## 主备配置示例
主节点 /etc/keepalived/keepalived.conf 核心:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
192.0.2.100/24
}
}
备节点只改两处:state BACKUP,priority 90。priority 决定谁当主,数字大的优先;virtual_router_id 两边必须一致,同网段内不同实例不能重复。两台都装 keepalived 并设自启,主节点 ip addr 能看到 VIP 挂在网卡上,杀掉主节点进程,几秒内备节点接管 VIP,恢复主节点后按配置策略抢占或保持。
## 验证与脑裂
验证从第三方机器持续 ping VIP 并发起业务请求,切换瞬间丢一两个包属正常,业务应快速恢复。脑裂是这套机制的头号风险:主备之间的心跳断了,但两台都活着,各自都认为对方挂了,同时抢 VIP,流量忽左忽右,数据一致性遭殃。根源是心跳链路单点:只用一根网线或单一 VLAN 互联,链路一断两边失联。防脑裂的思路是多通道检测:再加一条检测路径互相探测对方存活,或引入第三方仲裁节点,两条件都不满足才执行接管。
## 注意事项
云环境里 VIP 的实现要确认网络方案支持,部分虚拟网络对自定义 IP 漂移有限制,落地前先验证;同理,交换机侧对未声明的 IP 可能拦截。切换不只是 IP 的事:后端服务本身要能跟随拉起,配合健康检查脚本做联动,keepalived 支持检测脚本失败自动降级。主备两机的配置差异只在 state 与 priority,用模板管理防止漂移。上线后把心跳丢失事件接入告警,安静的漂移不需要人知道,吵闹的脑裂必须有人管。两机的配置与服务版本保持一致,版本不对称的漂移行为更难预判。