keepalived 默认为抢占式模式,主节点设 state master、priority 高于备节点(如120 vs 100),不配置 nopreempt 即可实现vip自动抢回;需确保 virtual_router_id、authentication 等参数一致,并建议结合 track_script 健康检查动态调整优先级。

Keepalived 默认就是抢占式工作模式,不需要额外开启——只要不配置 nopreempt,它就会在高优先级节点恢复后立即抢回 VIP。
抢占式的核心配置要点
抢占式依赖 VRRP 协议的天然机制:谁 priority 高、谁发通告快,谁就当 MASTER。关键在于角色状态、优先级差和健康联动。
一款AI工具,主要用于Monitor and clean up invalid Codex authentication files in CPA. Check quota status, disable files returning 401 errors, and perform dual verification before deletion.,适合需要提升相关任务效率的用户。
- 主节点设为 state MASTER,备节点设为 state BACKUP:这是最直观的主备标识,也是默认抢占的前提
- 主节点 priority 必须严格高于备节点(如 120 vs 100),差值建议 ≥20,避免因微小抖动误切
- interface、virtual_router_id、authentication 必须完全一致:否则两个节点无法识别为同一 VRRP 组,根本不会通信
- 不要加 nopreempt 参数:一旦加上,就变成非抢占;默认不写即为抢占
一个典型抢占式双机配置示例
假设 VIP 是 192.168.1.210,主节点 IP 为 192.168.1.201,备节点为 192.168.1.202:
-
主节点(nginx-01)/etc/keepalived/keepalived.conf 片段:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.210
}
} -
备节点(nginx-02)对应部分只需改两处:
state BACKUP
priority 100
让抢占更可靠:搭配健康检查
纯靠 priority 抢占有风险——比如 nginx 还没起来,Keepalived 就已抢回 VIP。推荐用 track_script 动态调优优先级:
- 定义一个检查脚本:
vrrp_script chk_nginx {
script "/usr/bin/pgrep -x nginx > /dev/null"
interval 2
weight -30
} - 在 vrrp_instance 中引用:
track_script {
chk_nginx
}
这样,主节点 nginx 崩溃时,它的实际 priority = 120 − 30 = 90,低于备节点的 100,自动降级;恢复后 priority 回到 120,立刻触发抢占
注意几个易错细节
- 防火墙要放行 VRRP 组播流量(目的 IP 224.0.0.18,协议 VRRP/112)
- 所有节点的 virtual_router_id 必须相同且唯一,不能与其他 Keepalived 实例冲突
- 如果使用云环境(如阿里云、AWS),需确认是否支持组播或改用单播(unicast_peer)
- 日志里看到 “VRRP_Instance(VI_1) Entering MASTER STATE” 表示抢占成功,“Transition to MASTER STATE” 表示正在切换










