调优advert_int需兼顾故障检测及时性与系统开销,应依据网络RTT和抖动设定合理值:局域网0.5~0.7秒、跨交换机1.5~2秒、跨机房3~5秒;须协同调整fail_count、preempt_delay等参数,并通过抓包和宕机测试验证效果。

调优 advert_int 的关键,是让心跳间隔既能及时发现故障,又不因过于频繁而加重网络与内核负担。它不是越小越好,也不能照搬默认值——必须结合实际网络质量、服务敏感度和系统资源来定。
根据网络延迟特征设合理值
advert_int 不是孤立参数,它的“安全下限”由网络 RTT 和抖动决定:
- 同机柜或稳定局域网(RTT 0.5~0.7 秒,检测窗口约 1.5~2.1 秒
- 跨接入/汇聚交换机(RTT 3–8ms,抖动 5–12ms):推荐 1.5~2 秒,避免偶发丢包误判
- 跨核心、跨机房或云上跨 AZ(RTT ≥ 15ms,抖动常超 20ms):应设为 3~5 秒,并同步启用
preempt_delay
简单估算公式:advert_int = ⌈(平均 RTT + 2×最大抖动) / 1000⌉ + 1(单位秒,向上取整)
避免高频心跳引发的额外开销
advert_int 过小不仅增加 VRRP 报文数量,还会间接抬高系统负载:
- Linux 内核定时器精度有限,advert_int
- 每秒多次发送 + 验证 + 状态判断,会增加 CPU 轮询压力,尤其在多实例部署时更明显
- 若启用了
notify_master或track_script,脚本执行耗时需远小于advert_int × fail_count,否则可能堆积或超时
配套参数必须协同调整
单改 advert_int 容易失衡,需同步优化相关行为:
-
fail_count:默认隐式为 3,即故障判定窗口 =
advert_int × 3。若将 advert_int 从 1 改为 0.5,窗口压缩至 1.5 秒,但若网络偶发延迟 2ms,就可能误切 -
preempt_delay:主恢复后延迟抢占时间,建议设为
advert_int × 3或更高(如 3 秒),防止 VIP 回切过快导致 ARP 缓存未更新 - authentication 类型:高频场景下禁用 AH 认证,改用 PASS(明文密码),减少加解密开销
验证是否真正平衡了响应与开销
调优后不能只看配置,要实测验证:
- 用
tcpdump -i eth0 vrrp抓包,确认通告间隔是否稳定落在目标值附近(允许 ±10% 偏差) - 模拟主节点宕机(
kill -9 $(pgrep keepalived)),观察备节点日志中 “Entering BACKUP STATE” 到 “Entering MASTER STATE” 的耗时 - 检查
/proc/net/snmp中 ICMP 和 IP 统计,对比调优前后 VRRP 相关报文增长幅度是否可控(理想增幅 ≤ 20%)










