当前位置:首页>Linux>Keepalived:VRRP的Linux实现,超越标准VRRP

Keepalived:VRRP的Linux实现,超越标准VRRP

  • 2026-10-11 07:52:04
Keepalived:VRRP的Linux实现,超越标准VRRP

在构建高可用网络时,网关冗余是避免单点故障的核心手段。

VRRP(虚拟路由冗余协议)提供了标准化的网关选举与故障切换机制,而Keepalived则是这一协议在Linux系统下最成熟、功能最丰富的开源实现。


一、VRRP协议原理

VRRP将多台物理路由器组合成一个虚拟路由器,对外呈现一个固定的虚拟IP和虚拟MAC,内网主机只需将网关指向该虚拟IP。当Master设备故障时,Backup自动接替,整个过程对终端透明。

1.1 核心概念与角色

概念
说明
虚拟路由器
由一个Master和多个Backup组成,对外表现为一台逻辑路由器。
VRID
虚拟路由器标识(1~255),同一组必须相同。
虚拟IP
终端网关地址,可与某台物理接口IP相同(该设备即IP拥有者)。
虚拟MAC00-00-5E-00-01-{VRID}
(IPv4)或00-00-5E-00-02-{VRID}(IPv6)。
Master
当前转发流量的路由器,定期发送通告报文。
Backup
就绪状态,监听Master通告,准备接管。
优先级
0~255,默认100,用于选举Master。IP拥有者固定为255。
抢占模式
默认开启,高优先级Backup可抢占Master;可配置延迟防止震荡。
通告间隔
Master发送VRRP通告的时间间隔,默认1秒。

1.2 Master选举与状态切换

  • 选举规则: 比较优先级,数值高者胜出;优先级相同时,接口IP较大者成为Master。
  • 故障检测: Backup在Master_Down_Interval内未收到通告即认为Master失效。计算公式:3 × Advertisement_Interval + Skew_time,其中Skew_time = (256 - Priority) / 256,用于错峰选举。
  • 状态机: 
    • Initialize → Master(IP拥有者优先级255 或 选举获胜)
    • Initialize → Backup(收到更高优先级报文或非IP拥有者)
    • Backup → Master(Master超时 或 被高优先级抢占)
    • Master → Backup(收到更高优先级报文且允许抢占)

1.3 VRRP报文

VRRP仅定义一种报文类型:ADVERTISEMENT(通告)。

  • 封装在IP协议号112,TTL=255,目的组播地址224.0.0.18(IPv6为ff02::12)。
  • 关键字段:VRID、Priority、Adver Interval、虚拟IP列表等。
  • 认证:早期版本支持简单认证,但现代标准(RFC 5798)已废弃,安全应由IPsec等上层机制保障。

1.4 关键机制

机制
原理
抢占延迟
高优先级设备加入后等待preempt_delay再切换,避免链路抖动导致频繁倒换。
IP拥有者
虚拟IP等于物理接口IP的路由器,优先级恒为255,不会被抢占。
接口跟踪
监视上行链路状态,链路故障时自动降低优先级,触发主备切换。
负载分担
创建多个VRID,不同虚拟组互为主备,使多台设备同时转发不同子网流量。
IPv6支持
VRRPv3使用虚拟链路本地地址,虚拟MAC以00-00-5E-00-02开头。

1.5 典型工作流程

  1. R1(优先级120)为Master,R2(优先级100)为Backup,虚拟IP为10.0.0.254。
  2. R1每秒发送通告,并响应对虚拟IP的ARP请求。
  3. R1上行接口故障,track功能将其优先级降至80。
  4. R2在超时后抢占为Master,立即发送免费ARP通知交换机更新MAC表。
  5. 流量无感切换。R1恢复后,因开启抢占(且优先级恢复为120),重新成为Master。

二、Keepalived:VRRP的Linux增强实现

Linux环境下的主流实现——Keepalived。它不仅完整实现了VRRP状态机和IP漂移,还引入了一套独立的健康检查框架,使故障切换不再仅依赖VRRP心跳,而是可以基于服务真实状态进行决策。

2.1 超越标准VRRP

Keepalived由主进程和两个核心子进程组成:

  • VRRP子进程: 负责协议交互、状态维护、VIP添加/移除。
  • Healthcheck子进程: 执行多层健康检查,根据结果动态调整VRRP优先级。

这种设计使Keepalived的故障检测能力远强于标准VRRP,支持:

  • L3检查: ICMP Ping
  • L4检查: TCP端口连接
  • L7检查: 自定义脚本,根据退出码判断服务状态

此外,Keepalived还内置了与LVS的集成,可直接配置四层负载均衡。

2.2 核心功能模块

配置文件 /etc/keepalived/keepalived.conf 围绕以下模块组织:

模块
作用
vrrp_instance
定义VRRP实例,设置角色、优先级、心跳、虚拟IP等。
vrrp_sync_group
将多个实例绑定,确保状态同步,防止“半脑裂”。
vrrp_script
定义健康检查脚本,设定检测间隔、失败阈值和权重调整。
virtual_server
配置LVS虚拟服务器,实现TCP负载均衡。

2.3 配置文件详解

以下为一个典型的Nginx双机热备配置,展示各模块的组合用法。

主节点(Master)配置:

global_defs {    router_id SRV_MASTER}# 定义健康检查脚本vrrp_script chk_nginx {    script "/etc/keepalived/check_nginx.sh"    interval 2          # 每2秒检查    weight -20          # 失败后优先级降低20    fall 3              # 连续失败3次视为异常    rise 2              # 连续成功2次视为恢复}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 51    priority 100    advert_int 1    # 生产环境建议开启nopreempt,避免频繁震荡    nopreempt    authentication {        auth_type PASS        auth_pass YourPasswd123    }    virtual_ipaddress {        192.168.1.100/24 dev eth0    }    track_script {        chk_nginx          # 关联健康检查脚本    }    notify_master "/usr/local/bin/keepalived_notify.sh master"    notify_backup "/usr/local/bin/keepalived_notify.sh backup"}

备节点(Backup)配置差异:

global_defs {    router_id SRV_BACKUP}vrrp_script chk_nginx {    # 与主节点完全一致}vrrp_instance VI_1 {    state BACKUP    priority 90         # 必须低于Master    # 其余参数与主节点相同}

VRRP同步组配置示例(多子网场景):

vrrp_sync_group VG_1 {    group {        VI_1          # 内网VIP实例        VI_2          # 外网VIP实例    }    notify_master "/path/to/notify.sh"}

2.4 高可用模式选择

  • 主备模式(Active/Passive): VIP仅存在于Master,Backup闲置。配置简单,适合对资源利用率要求不高的场景。
  • 双主/负载分担模式(Active/Active): 创建两个VRRP实例,服务器A为实例1的Master、实例2的Backup;服务器B相反。流量可同时由两台设备处理,但需逻辑隔离。
  • 单播通信: 公有云等环境可能禁止多播,Keepalived支持将通告报文通过单播发送至对端,只需在实例中添加unicast_peer即可。

2.5 运维关键事项

  • VIP切换原理: 新Master发送免费ARP,通告本地交换机更新转发表,实现流量瞬间牵引。
  • 日志与监控: 默认日志位于/var/log/messages,所有角色切换、脚本执行失败等事件均可通过日志追溯。
  • 配置测试: 修改配置后务必执行keepalived -t -f /etc/keepalived/keepalived.conf进行语法校验。
  • 脚本编写: 健康检查脚本需要有可执行权限,退出码0代表成功,非0代表失败。脚本内容应尽量简单,避免长时间阻塞。

三、协议对比:VRRP vs. HSRP

特性
VRRP / Keepalived
HSRP(思科私有)
标准
RFC 5798(开放标准)
思科私有
虚拟MAC
00-00-5E-00-01-{VRID}
0000.0c07.ac{群组号}
抢占
默认开启(Keepalived可关闭)
默认关闭
认证
已废弃
支持MD5/明文
健康检查
标准VRRP仅接口跟踪;Keepalived支持L3~L7脚本
可track接口及增强对象跟踪
部署环境
跨厂商,Linux下由Keepalived实现
仅限思科设备

结语

VRRP为网关冗余提供了标准化、轻量级的基石,而Keepalived则通过健康检查、同步组、通知脚本等扩展,使其真正成为生产环境中高可用架构的利器。无论是最简单的两台Nginx反向代理,还是复杂的多子网LVS集群,理解其协议原理与配置精髓,都能帮助工程师构建出更稳定、更智能的容错系统。

最新文章

随机文章