
Keepalived 原理篇VRRP 协议与 VIP 漂移机制深入解析开篇很多运维朋友都用过 Keepalived知道它能做高可用、能漂移 VIP但对它为什么能漂移、VRRP 报文里到底传了什么、主备是怎么选举的往往一知半解。本文作为 Keepalived 系列的第二篇不讲配置、不写安装专门把 VRRP 协议与 VIP 漂移的底层机制讲透。理解了原理遇到诡异的高可用问题才能真正定位。一、Keepalived 的角色定位先明确一件事Keepalived 本身不提供业务能力它是一个状态协调器。它做两件事用VRRP 协议在多个节点间协商出一个虚拟路由器对外暴露一个虚拟 IPVIP。用健康检查脚本 优先级动态决定此刻该由谁持有 VIP。它就像一个裁判只负责判定谁上场真正的业务Nginx/MySQL/LVS由裁判之外的选手完成。二、VRRP 协议的前世今生2.1 它解决什么问题在 VRRP 出现之前局域网内要做网关冗余用的是HSRP思科私有或VRRP 前身协议各自封闭、互不兼容。VRRP 由 IETF 标准化解决了网关单点故障一个路由器挂了全网断网。协议不互通不同厂商设备无法协同做冗余。VRRP 让一组路由器对外虚拟成一台路由器客户端把网关设成这个虚拟 IP 即可底层谁在服务客户端不关心。2.2 版本演进版本说明VRRPv2RFC 3768仅支持 IPv4Keepalived 2.x 默认VRRPv3RFC 5798支持 IPv4/IPv6报文结构有变化Keepalived 2.x 同时支持 v2/v3通过advert报文版本自动协商。IPv6 环境必须用 v3。2.3 VRRP 的三个角色角色职责Master持有虚拟 IP正常转发流量周期性发 Advertisement 报文Backup监听 Master 报文等待接管可以有多台Virtual Router逻辑概念一组 MasterBackup 对外构成的虚拟路由器三、VRRP 报文结构拆开看VRRP 基于IP 组播通信协议号为112目的组播地址为224.0.0.18。报文不经过 TCP/UDP直接封装在 IP 层。3.1 报文关键字段0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1--------------------------------|Version| Type | Virtual Rtr ID| Priority | Count IP Addrs|--------------------------------|(v2) Auth Type | Adver Int | Checksum |--------------------------------| IP Address (VIP) |--------------------------------| Authentication Data (v2 only) |--------------------------------字段含义Version/Typev2 或 v3Type1 表示 Advertisement 通告报文Virtual Rtr ID虚拟路由器 ID0~255同组必须一致Priority优先级1~255选举 Master 的核心依据Count IP Addrs携带的虚拟 IP 个数Adver Int通告间隔秒Master 发送报文的周期IP Address虚拟 IPVIP地址列表Authentication Data认证数据v2 的简单认证PASS/AH核心理解VRRP 报文就是 Master 每Adver Int秒广播一次我还活着优先级是 XX虚拟 IP 是我的这样的声明。Backup 就是听这个声明来判断要不要接管。3.2 为什么要 multicast组播组播224.0.0.18比单播高效——一台 Master 发一次所有 Backup 同时收到无需知道各自地址。但组播依赖二层多播能力云服务器、部分交换机上会被丢弃这是云上必须改单播的根本原因。四、Master/Backup 选举机制核心中的核心这是全文最值得记的部分。Keepalived 的选举规则就一条priority 值大的当 Masterpriority 相同时真实 IP 大的当 Master。但要注意顺序和细节4.1 初始状态节点启动后先进入Backup状态等待Master_Down_Interval默认约3 × Adver_Int时间。若这段时间内没收到任何 Master 通告则立即抢占为 Master。4.2 抢占Preempt默认开启抢占。一台priority 更高的 Backup一旦上线会立刻剥夺现有 Master 的 VIP。这就是主节点重启后能抢回 VIP的机制。4.3 抢占条件细节抢占时不是只看 priority而是比Master 的 priority 累计减分选举依据 Master 通告中的 priority weight 累计结果这也是为什么健康检查失败weight-60会把一个 150 的 Master 拉低到 90从而让 100 的 Backup 胜出。4.4 完整状态机启动│▼┌─────────┐ Master_Down_Interval 超时 ┌─────────┐┌──────▶ │ BACKUP │ ───────────────────────────▶ │ MASTER ││ └─────────┘ └─────────┘│ ▲ ││ │ 收到更高priority的通告 │ 本机priority被│ │ 或本机priority被压低 │ 健康检查压低│ └────────────────────────────────────────┘状态触发条件动作Backup → Master超时未收到 Master 通告或收到更低 priority 通告绑定 VIP、发送免费 ARPMaster → Backup收到更高 priority 通告开启抢占释放 VIP、停止通告Master → Fault本机网卡故障、健康检查持续失败释放 VIP进入 Fault 待机五、VIP 漂移的完整链路逐字节拆解以主节点 node1 宕机 → 备节点 node2 接管为例时间线T0 node1(MASTER) 持有 VIP192.168.1.100每1秒发一次组播通告T1 node1 宕机停止发通告T2 node2 最后一次收到通告T3 等待 Master_Down_Interval≈3秒超时node2 判定 Master 失联T4 node2 将 VIP 192.168.1.100 绑定到自己的 eth0T5 node2 向全网发送免费 ARP(Gratuitous ARP)宣告192.168.1.100 的 MAC 现在是 node2 的 MACT6 网关/交换机刷新 ARP 表发往 VIP 的流量转向 node2T7 node2 进入 MASTER 状态开始发送自己的 VRRP 通告关键点VIP 的漂移本质是两步——① 把 IP 从 node1 解绑并绑到 node2② 用免费 ARP通知全网这条 IP 换了 MAC 地址。第②步若失败如 ARP 缓存未刷新流量仍会发往已宕机的 node1造成VIP 已漂移但业务不通的假象。免费 ARPGratuitous ARP的作用它是一类特殊的 ARP 请求源 IP 目标 IP VIP接收方不是问谁有这个 IP而是我有这个 IP请大家更新 ARP 表。Keepalived 在 Master 状态切换后会连续发送多次免费 ARP默认 5 次间隔由garp_master_delay控制确保所有二层设备刷新缓存。六、主备状态与抢占的边界条件容易踩坑6.1 两台都成了 Master脑裂当心跳链路断了交换机故障、组播被禁node2 收不到 node1 通告会误判 node1 挂了而抢占 VIP结果两台同时持有 VIP这就是脑裂Split Brain。Keepalived 自身的脑裂防护手段有限规避方式关键业务配合仲裁机制如 MySQL 配 MHA 或双主防脑裂保持优先级严格唯一避免平票网络层面保证 VRRP 心跳链路的高可用。6.2 免费 ARP 失败导致流量不切换常见于虚拟化/云环境。排障时可用bash# 看 VIP 是否真的绑定了ip addr show eth0# 手动清 ARP 表强制刷新arp -d 192.168.1.100七、单播模式与多播模式何时用哪个模式配置适用场景多播默认无需额外配置传统局域网、机房物理机单播配置unicast_src_ipunicast_peer云服务器、跨网段、多播被禁环境判断标准能 ping 通彼此、但 VIP 不漂移、日志提示收不到对端通告时八成是多播被禁改用单播。单播配置示例confvrrp_instance VI_1 {unicast_src_ip 10.0.0.11 # 本机真实 IPunicast_peer {10.0.0.12 # 对端真实 IP}# 其余配置同多播}八、理解这些原理对排障有什么用故障现象原理层面的解释VIP 起不来没有触发 Backup→Master 的超时判定或 virtual_router_id 冲突双 Master心跳链路中断双方都判定对方失联脑裂主恢复了却切不回去非抢占模式或 weight 配置让主恢复后 priority 仍低VIP 漂了但业务不通免费 ARP 未刷新网关 ARP 表仍是旧 MAC时好时坏、抖动组播被部分丢弃、Adver_Int 与链路抖动冲突九、总结把原理浓缩成三句话VRRP 是选裁判的协议通过组播/单播交换 priority决定谁当 Master、谁持 VIP。VIP 漂移是IP 换绑 免费 ARP先换绑 IP再用免费 ARP 通知全网更新 MAC。健康检查是加减分业务挂了就减 priority让 Backup 名正言顺地赢下选举。理解了这三层Keepalived 在你眼里就不再是玄学而是一套逻辑清晰的选举宣告机制。下一篇我们讲keepalived.conf 全参数详解与常见坑大全把配置层面的每个参数掰开揉碎。本文为 Keepalived 高可用系列第 2 篇。系列目录① KeepalivedNginx 实战 → ② VRRP 原理篇本文 → ③ 配置与排障 → ④ KeepalivedMySQL 主从高可用。