keepalived 实现网关高可用漂移本质是基于vrrp协议使主备服务器共用vip,主故障时自动迁移;需确保网络可达、vrrp互通、配置参数严格一致,公有云须用havip且禁用组播,核心四要素为state、priority、virtual_router_id、authentication。

Keepalived 实现网关高可用漂移,本质是用 VRRP 协议让两台 Linux 服务器对外共用一个虚拟网关 IP(VIP),主节点故障时 VIP 自动迁移到备节点,客户端无感切换。关键不是“装上就能用”,而是三要素必须对齐:网络层可达、VRRP 协议通、配置参数严丝合缝。
确认部署环境类型,决定配置逻辑
公有云和私有环境处理方式完全不同,混用必失败:
-
物理机 / VMware / OpenStack / 本地局域网:可直接启用 VRRP 组播(224.0.0.18),VIP 用
ip addr add绑定到真实网卡(如 ens33),interface 填网卡名,virtual_router_id 主备一致即可 -
阿里云、腾讯云、AWS 等公有云:VRRP 组播被屏蔽,必须先在控制台创建 HaVip(或 Secondary IP),并手动绑定到主备 ECS 实例(需在同一交换机);keepalived.conf 中
virtual_ipaddress只能填这个已绑定的地址,填其他 IP 流量根本进不来
核心配置四要素不能出错
90% 的 VIP 不漂移或漂了不生效,都卡在这四个字段:
-
state:主节点写
MASTER,备节点写BACKUP;不要留空、不要写 FAULT,否则不参与选举 -
priority:主备差值必须大于
advert_int(默认 1 秒),例如设为 100 和 98;若只差 1,在网络抖动时极易反复切换 - virtual_router_id:同一 VRRP 实例中主备必须完全一致(范围 1–255),且整个局域网内唯一;多个实例则 ID 必须不同
-
authentication:
auth_pass主备严格相同,长度 ≤8 字符,大小写敏感
网络与系统层面必须打通
VIP 能漂不等于能通,还需检查底层连通性:
- 两台机器执行
ip -br a,确认目标网卡 UP 状态,且物理 IP 与 VIP 在同一子网(如都是 192.168.100.0/24) - 防火墙放行 VRRP 协议:
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent && firewall-cmd --reload - SELinux 启用时需授权:
setsebool -P keepalived_read_etc 1,否则无法读取自定义健康检查脚本 - 禁用
vrrp_strict模式(默认配置里常有)——它会阻止非 owner IP 响应 ping,导致 VIP 看似绑定成功却无法访问
精简配置,避免干扰项
若仅需 VIP 漂移(不是做 LVS 负载均衡),原始配置里这些内容要删掉:
- 整个
virtual_server块:它会加载 ipvs 内核模块,抢占 VIP 端口,导致 ping 不通、服务不可达 -
vrrp_sync_group(除非真有多实例联动需求) - 冗余的 global_defs(如 router_id 若无特殊用途可省略)
最简有效 vrrp_instance 示例:
vrrp_instance VI_GATEWAY {state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.100.1
}
}











