调优 advert_int 是缩短 keepalived 主备切换感知时间最直接有效的方式,其值决定 vrrp 通告间隔,默认 1 秒,局域网可降至 0.3~0.5 秒,需同步调整 fail_count、preempt_delay 等参数并验证稳定性。

调优 advert_int 参数是缩短 Keepalived 主备切换感知时间最直接有效的方式之一,但需在稳定性与响应速度之间取得平衡。
advert_int 的作用机制
advert_int(单位:秒)定义了 Keepalived 主节点向备节点发送 VRRP 通告报文的时间间隔。备节点依靠持续接收这些通告来判断主节点是否存活——一旦连续丢失多个通告(默认为 3 × advert_int),即触发故障转移。
因此,减小该值可加快故障检测速度,但也可能因网络抖动或瞬时延迟导致误切。
合理设置 advert_int 的建议值
默认值通常为 1 秒,适用于多数局域网环境。如需缩短感知时间,可按以下原则调整:
- 局域网稳定、延迟低于 1ms:可设为 0.5 或 0.3,故障检测窗口压缩至约 1.5s~2s
- 跨机架或存在轻微丢包的环境:推荐 0.7~0.9,兼顾灵敏度与鲁棒性
- 不建议低于 0.2:Linux 协议栈和内核定时器精度限制可能导致实际发送不稳定
- 若已启用
garp_master_delay或notify_master类脚本,需确认其执行耗时不超过新的检测窗口
配套参数必须同步调整
仅调小 advert_int 不足以保障快速且可靠的切换,还需检查并协调以下参数:
-
fail_count(或隐式使用的3):Keepalived 默认等待 3 个周期未收到通告才判定失败。若将advert_int改为 0.5,实际故障识别时间≈1.5s;如需进一步压缩,可配合vrrp_sync_group中的notify_backup提前清理资源 -
preempt_delay:主恢复后延迟抢占时间,建议设为 0 或极小值(如 1),避免主恢复后长时间无法接管 -
authentication类型:使用AH认证会增加处理开销,高频率通告下建议用PASS(明文密码)以降低延迟
验证与观测要点
调优后务必通过真实断网或进程 kill 模拟主节点宕机,并观察备节点日志及 VIP 切换时间:
- 查看
/var/log/messages或 journalctl -u keepalived 中 “VRRP_Instance(xxx) Entering BACKUP STATE” 时间戳 - 用
tcpdump -i eth0 vrrp抓包确认通告间隔是否符合配置 - 注意:频繁切换(flapping)往往不是
advert_int太小的直接结果,而是底层网络不稳定或脑裂未防护所致,需结合unicast_peer或脚本仲裁补强










