十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VRRP实战指南:双机热备、虚拟IP与网关冗余原理

VRRP实战指南:双机热备、虚拟IP与网关冗余原理 前阵子一个老朋友找我喝咖啡聊起他们公司最近一次全网瘫痪事故。核心交换机电源模块烧了全公司几百号人一上午什么都干不了。他们明明有两台核心交换机还做了堆叠但网关依然配置在那台烧掉的设备上。我听完只能说一句堆叠保的是设备冗余网关保的是三层可用性两码事。这其实就是今天想聊的VRRP虚拟路由器冗余协议出现的根本原因。一句话版本VRRP就是让两台或更多路由器/三层交换机共享同一个虚拟IP正常时由一台设备转发流量出问题时另一台设备立刻接管终端几乎无感知。它是网络高可用里最经典、也是最基础、性价比最高的一招。适合所有搞企业网搭建、网络运维、数据中心设计的朋友参考尤其适合那些“明明有两台网关设备却还是会被一台设备拖死”的场景。1. VRRP到底解决了什么问题1.1 从一次“全网瘫痪”说起静态网关的致命单点传统组网里终端要上网最常见也是最省事的办法就是配一个静态默认网关。比如PC的IP是192.168.10.10/24默认网关填192.168.10.1所有跨网段的流量都交给192.168.10.1去转发。这个网关可以是路由器、三层交换机甚至是一台防火墙。问题在于这个网关一旦宕机整个网段内所有终端的跨网段访问全部中断。你可能会问终端不能配两个默认网关吗答案是不能。大多数操作系统的路由表里同一张网卡只能有一个默认网关生效。你就算在网卡的高级设置里配了两个IP和两个网关实际发包时也只会走第一个而且OS还会根据网络连通性反复切换造成更诡异的间歇性断网。还有人说可以用堆叠。堆叠确实能解决单台设备故障的问题两台设备堆叠成一台逻辑设备接口、MAC、转发状态都统一了。但前提是你得买支持堆叠的机型、做好堆叠配置而且在真实事故里堆叠系统也会因为电源、主控、版本升级、脑裂等问题整体失效。更关键的是很多中小网络只有两台独立的三层交换机不支持堆叠或者不想承担堆叠带来的复杂度这时候就非常需要VRRP。VRRP全称Virtual Router Redundancy Protocol由IETF在RFC 3768中定义后来在RFC 5798中更新为VRRPv3。它解决的问题非常聚焦在不改动终端配置的前提下为默认网关提供一个高可用方案。把多台设备编成一个“虚拟路由器”组对外只暴露一个虚拟IP终端只管往这个IP发包至于这个IP背后是哪台物理设备在干活终端根本不关心。1.2 VRRP的核心思想一台虚拟路由器多台设备垫底VRRP的思路很直白既然终端只能认一个网关IP那我们就把这个IP“虚拟化”让它在任何时刻都对应一台活着的设备。参与VRRP的一组设备组成一个VRRP组用VRIDVirtual Router ID来标识组内共享同一个虚拟IP和同一个虚拟MAC地址。正常状态下组内只有一台设备处于Master状态负责转发终端发往虚拟IP的流量其他设备处于Backup状态默默监听Master的状态。一旦Master故障Backup会在约定时间内提升为新的Master继续使用同一个虚拟IP和虚拟MAC转发流量。由于虚拟IP和虚拟MAC在切换前后保持不变终端侧的ARP缓存完全不需要更新切换对业务的影响被降到最低。打个比方VRRP就像一个公司前台对外统一公布一个总机号码。一号接待员在就一号接一号请假了电话自动转给二号接待员打进来的客户根本不知道背后换人了。这个设计比直接在终端上配置多网关要聪明得多。终端不需要知道网络内部有几台设备也不需要自己去做网关探测和切换所有高可用逻辑都收敛在网络设备这一侧运维人员只需要在核心设备上做一次配置全网终端零改动。1.3 VRRP能做什么、不能做什么别指望它背锅VRRP不是万能药。我见过不少人把VRRP当成网络高可用的“银弹”上完之后以为万事大吉结果该断网还是断。这里把它的边界说清楚。VRRP能做的事情有三类。第一网关冗余这是核心功能。第二通过配置多个VRRP组在不同设备上分别成为Master可以实现不同VLAN的网关负载均衡让两台设备都有活干。第三配合接口监控、路由监控、BFD联动可以感知上行链路故障主动触发主备切换缩短业务中断时间。VRRP不能做的事情至少也有三类。第一它不能实现同一台终端流量的跨设备负载分担。主备模式下同一时刻只有一台设备在转发某个VRRP组的流量另一台设备在闲置链路利用率不会因为配了VRRP就翻倍。第二它不能解决设备间的会话状态同步。如果跑的是基于会话的业务比如防火墙、NAT网关VRRP本身不负责同步会话表你需要借助防火墙双机热备这类带状态同步的方案。第三它不能替代堆叠或M-LAG。跨设备链路聚合这种二层技术VRRP是做不到的要想让两条物理链路同时干活还是得上堆叠或M-LAG。换句话说VRRP解决的是“默认网关的可用性”而不是“所有网络的可用性”。这句话理解了你就不会对它有超出实际能力的期待。2. 核心机制拆解虚拟MAC、状态机、选举与定时器2.1 角色与状态机Master、Backup、Initialize怎么切换VRRP组里的每台设备在同一时刻只可能是三种状态之一Initialize、Master、Backup。Initialize是初始状态。设备刚启动、接口还没起来的时候VRRP进程处于这个状态。一旦接口UP且配置了VRRP设备就会根据自身优先级决定进入Master还是Backup。进入Master的条件有两个要么你是这个VRRP组里的IP地址拥有者也就是接口的真实IP和虚拟IP完全相同系统直接让你当Master要么你的优先级比当前Master高并且开启了抢占模式。进入Master后设备会承担三件事响应终端对虚拟IP的ARP请求、转发发往虚拟IP的流量、周期性发送VRRP Advertisement报文告诉其他Backup“我还活着”。Backup状态则要安静得多。它不会响应虚拟IP的ARP请求也不会转发发往虚拟IP的流量只是在默默等待Master的Advertisement报文。一旦在Master_Down_Timer超时后仍然没有收到Master的报文它就会认为自己应该接管跳转到Master状态。有一个细节要特别注意Backup收到Master发来的Advertisement报文后如果发现报文里的优先级比自己低并且自己配置了抢占它会直接切换成Master并发送自己的Advertisement报文。这一条在排查“主备不切换”的时候经常被忽略。2.2 Advertisement报文与虚拟MAC每1秒报一次“我还活着”VRRP的通信完全靠Advertisement报文这个报文由Master周期性发送默认间隔是1秒。报文的目的IP是组播地址224.0.0.18目的MAC是组播MAC 01:00:5e:00:00:12源MAC则是虚拟MAC。等等这里有一个关键的细节VRRP报文的源IP是发送设备的真实接口IP但源MAC是虚拟MAC目的地址是组播。这说明二层帧头里承载的是虚拟身份三层报文里承载的是真实身份确保接收方能识别出这是哪个VRRP组发出的。Advertisement报文的关键字段包括版本号v2或v3、VRID、优先级、Advertisement间隔、IP地址数量、认证信息v2可选以及虚拟IP列表。报文格式本身不复杂但它承担了“心跳”的全部职责。收到报文的Backup会解析这些字段用来更新Master状态记录。虚拟MAC地址是VRRP非常巧妙的设计。IPv4场景下虚拟MAC是00:00:5e:00:01:XX其中最后的XX就是VRID。例如VRID为1虚拟MAC就是00:00:5e:00:01:01。这个MAC地址在全网具有唯一性并且和物理设备无关只跟VRID绑定。Master切换后新Master继续使用这个MAC地址终端ARP表里的“虚拟IP-虚拟MAC”映射完全不用更新这就是VRRP切换对终端“无感”的底层原理。2.3 主备选举优先级、IP地址拥有者与抢占延迟VRRP组里的主备角色最终由两个因素决定优先级和接口IP地址。优先级范围是1到254默认值是100数值越大越优先。执行vrrp vrid 1 priority 120这类命令就是在调整这个值。还有两种特殊情况优先级255被保留给IP地址拥有者也就是虚拟IP和接口真实IP相同时该设备天然是Master且不允许被抢占优先级0则是特殊用途在报文里表示Master主动放弃当前角色。如果两台Backup的优先级相同那就比较接口IP地址IP地址大的一方成为Master。这个规则在传统VRRP实现里是固定逻辑配置时需要注意如果不想让某台设备在平票时胜出就把它的优先级调低一点。抢占默认是开启的。也就是说一台Backup如果在运行中收到了比自己优先级低的Master发来的Advertisement报文会立刻抢占成为Master。这个机制很强大但也很危险如果主设备只是临时网络抖动或者恢复后优先级略高就会立刻抢回来导致网关在主备之间来回跳业务在切换瞬间出现短暂的丢包。因此在实际配置中几乎都会给抢占加一个延迟时间。比如华为设备上用preempt-mode timer delay 10意思是当满足抢占条件后先等10秒再切换。这10秒足够让网络稳定下来也能避免主备振荡。思科的HSRP则是默认关闭抢占需要手动敲standby 10 preempt才会开启两者默认行为不同跨厂商操作时要格外注意。2.4 Master_Down_Timer的计算3倍间隔里藏着的设计智慧Backup判断Master是否故障靠的不是收到“故障报文”而是“收不到心跳报文”。这个等待时间叫Master_Down_Timer它的计算方式是Master_Down_Timer (3 × Advertisement_Interval) (256 - Priority) / 256假如Advertisement间隔是1秒Backup优先级是100那么它的超时时间就是3 (256 - 100) / 256 ≈ 3.61秒。也就是说连续3.61秒没收到Master的Advertisement报文它就开始竞选Master。这个公式有两个精妙之处。第一3倍间隔是为了容忍报文丢失。1秒一个心跳丢一个、丢两个都还能撑住不至于因为偶发丢包就触发切换避免无谓的抖动。第二(256 - Priority) / 256这个Skew_Time项其实是为了让高优先级的Backup先超时。你想如果两台Backup同一时刻开始计时大家都等3秒3秒后一起变成Master那就双主了。有了Skew_Time优先级高的Backup等待时间更短先超时、先转Master、先发Advertisement报文低优先级的设备收到后自然就放弃竞选退居Backup。所以VRRP这套选举机制本质上是通过“让最该当Master的设备先跳出来”来避免双主。理解了这一步你在排障时看到两台设备同时是Master第一反应就应该是肯定有哪个条件破坏了这套时序逻辑。3. 完整实操从拓扑规划到双机热备配置3.1 组网拓扑与地址规划实操之前先把拓扑和地址规划清楚。我这里给一个最经典的双机热备场景也是中小企业和分支机构的常见组网。终端PC接到二层接入交换机接入交换机通过两条上行链路分别接到两台三层交换机SW1和SW2。SW1和SW2作为用户的网关运行VRRP。两台三层交换机再分别上行到出口路由器或防火墙去往互联网。地址规划如下表设备接口/地址用途VRRP角色SW1Vlanif10: 192.168.10.2/24用户网关接口Master优先级120SW2Vlanif10: 192.168.10.3/24用户网关接口Backup优先级100虚拟网关Vlanif10: 192.168.10.254终端配置的默认网关VRID 1PC192.168.10.10/24网关192.168.10.254终端—为什么SW1优先级配120SW2保持默认100目的就是让SW1在正常情况下成为MasterSW2作为冷备。等SW1真的挂了SW2的等待时间一过就会接管。恢复后SW1的优先级更高会在抢占延迟结束后重新夺回Master回到初始状态。还要考虑一个问题如果SW1的上行链路连出口路由器那条线断了但SW1本身仍然活着VRRP会认为Master健在不会切换。结果就是终端网关还指向SW1但SW1已经没路可走流量出不去。这个问题必须在配置里通过track机制解决后面会详细说明。3.2 华为三层交换机VRRP配置步骤这里以华为S5735系列三层交换机为例华为很多企业级路由器和交换机都支持VRRP命令。新增VLAN、配置接口、启用VRRP的完整步骤如下。第一步创建业务VLAN并把下行接口加入VLANsystem-view vlan batch 10 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit下行接口是连接二层接入交换机的口用access口放通VLAN 10即可。如果你的下游接的是Trunk口这里改成trunk类型并允许VLAN 10通过。第二步创建VLANIF接口并配置IP地址interface Vlanif10 ip address 192.168.10.2 255.255.255.0 quitSW2上对应的Vlanif10配置192.168.10.3/24。第三步配置VRRP组1的虚拟IP、优先级和抢占延迟interface Vlanif10 vrrp vrid 1 virtual-ip 192.168.10.254 vrrp vrid 1 priority 120 vrrp vrid 1 preempt-mode timer delay 10 quitSW2上同样配置VRRP但优先级保持默认100抢占延迟也建议配上interface Vlanif10 vrrp vrid 1 virtual-ip 192.168.10.254 vrrp vrid 1 preempt-mode timer delay 10 quit这几个命令里virtual-ip指定虚拟网关IP两台设备必须完全一致priority控制主备偏向preempt-mode timer delay是抢占延迟强烈建议在生产环境配置。如果不配延迟恢复设备的抢占几乎是瞬间发生的主备来回切换会造成网关抖动。第四步配置上行链路监控也就是track机制。SW1的上行口是GigabitEthernet0/0/24连出口路由器。一旦这个口down掉SW1应该主动降低优先级把Master让给SW2。interface Vlanif10 vrrp vrid 1 track interface GigabitEthernet0/0/24 reduced 40 quit这句的意思是当GigabitEthernet0/0/24状态变为down时SW1在VRRP组1里的优先级从120降为80120-4080。由于SW2的优先级是100自然就超过SW1成为MasterSW1自动退居Backup。这里reduced值一定要算准保证降低后的优先级低于对方的优先级这个场景里40就够因为120-4080小于SW2的100。如果还想监控路由是否存在可以配vrrp vrid 1 track ip route 0.0.0.0 0.0.0.0 reduced 40意思是默认路由消失时降低优先级。有些场景我甚至会把BFD加进来做快速感知这个后面再展开。配置完成后用display vrrp可以看到主备状态。正常情况下SW1应该显示MasterSW2显示Backup。3.3 思科HSRP/VRRP配置对比与差异思科设备上VRRP和HSRP都能实现网关冗余。HSRP是思科私有协议配置更常见VRRP是标准协议在纯思科环境里也能用。HSRP的配置思路和VRRP几乎一样以思科IOS交换机为例interface Vlan10 ip address 192.168.10.2 255.255.255.0 standby 10 ip 192.168.10.254 standby 10 priority 120 standby 10 preempt delay minimum 10 standby 10 track GigabitEthernet0/1 40注意几个差异HSRP的组号是standby 10里的10和VRID不是同一个概念。HSRP默认不抢占必须手工开启preempt这一点和华为VRRP默认抢占完全相反。HSRP的track语法和华为也不一样track后面直接跟接口和减掉的优先级值不需要写reduced。思科原生VRRP的配置如下interface Vlan10 vrrp 10 ip 192.168.10.254 vrrp 10 priority 120 vrrp 10 preempt delay minimum 10 vrrp 10 track GigabitEthernet0/1 decrement 40思科VRRP里track用decrement含义和华为的reduced一致。组播地址方面VRRP用224.0.0.18HSRP用224.0.0.2老版本或224.0.0.102新版本排障抓包时可以根据目的IP快速判断协议类型。跨厂商配置最实用的经验是先看设备默认行为再动手配置。比如华为默认开启抢占思科HSRP默认关闭抢占如果你把华为的习惯带到思科上很可能出现“配完优先级但不抢占”的怪问题。3.4 验证与故障演练切换无感才是真冗余配置完不等于任务完成必须做完整的验证和故障演练。验证分四个层次。第一层查状态。在SW1上执行display vrrp brief预期看到Vlanif10、VRID 1的状态为Master优先级120虚拟IP 192.168.10.254。SW2上对应状态为Backup。如果状态不对先别往下走排查配置差异。第二层测连通性。从PC持续ping虚拟网关192.168.10.254同时ping一个外网地址如果出口链路通的话。局域网内ping通虚拟网关说明VRRP的转发面正常三层通了。第三层切换测试。这是最重要的一步。在PC上开一个持续的ping然后在SW1的Vlanif10或上行口执行shutdown观察ping丢几个包。正常情况下由于VRRP切换需要等待Master_Down_Timer超时默认约3.6秒你会看到3到5个ping超时之后恢复。如果你配置了BFD联动丢包能控制在极短时间内。切换完成后再执行display vrrp briefSW1的状态应该变成Backup或者Initialize取决于你shutdown哪个接口SW2变成Master。然后把SW1的接口恢复开启抢占延迟后过十几秒SW1会重新夺回Master。这个过程同样要在PC端持续ping观察确认恢复过程不会造成长时间中断。第四层抓包验证。在SW1的Vlanif10上抓包使用Wireshark过滤vrrp或ip.dst 224.0.0.18。正常时每秒能看到一个Advertisement报文源MAC是虚拟MAC目的IP是224.0.0.18。切换时应该能看到新Master立刻发送的免费ARP和Advertisement报文。这个抓包结果可以直观又客观地证明VRRP工作正常。4. 常见故障排查与避坑经验4.1 常见问题速查表VRRP在运维中常见的问题不少我把高频故障整理成一张速查表方便查阅。故障现象可能原因排查方法解决建议两台设备同时是Master二层隔离导致组播报文不通、ACL过滤了224.0.0.18、VRRP认证不匹配、Backup没收到Master报文在两端同时抓包看224.0.0.18是否能到达检查中间交换机端口隔离、VLAN配置统一认证参数Backup升级不了Master抢占未开启、priority设置错误、track导致优先级降低、Master还活着执行display vrrp查看状态和事件计数确认协议状态和对应优先级切换丢包严重Master_Down_Timer等待时间太长、设备CPU过高导致延迟、网络抖动抓包统计丢包数量和时间点缩短Advertisement间隔配合BFD快速检测主备频繁切换抢占无延迟、链路翻动、track误报查看日志和VRRP状态刷新时间配置抢占延迟检查track目标接口和路由健康状态虚拟IP ping不通VLANIF未启用、VRRP组没up、ACL拦截、安全策略确认端口状态和display vrrp输出检查三层接口Up状态和安全策略切换后部分终端断网终端ARP缓存异常、交换机端口安全限制免费ARP、STP收敛慢检查终端ARP表、交换机端口安全配置开启新Master免费ARP通告检查MAC地址学习限制排查VRRP问题最重要的原则是“分层看”。二层的组播能不能通决定了VRRP心跳是否正常三层的虚拟IP有没有响应决定了网关是否可用四层的安全策略放没放行决定了业务流量是否畅通。这三层任何一个环节出问题VRRP都会表现为异常。4.2 一次双主故障的排障记录去年帮一个客户处理过一次VRRP双主故障很有代表性。现场环境是一台汇聚交换机下面挂了两台三层网关设备跑着VRRP。客户反馈业务时好时坏PC去ping虚拟网关的时候通时不通一看设备状态两台都是Master。这种问题最怕瞎猜我直接在SW1的上行口和SW2的上行口分别做镜像抓包。结果很有意思SW1能看到自己发出的VRRP报文也能看到SW2发出的VRRP报文但SW2只能看到自己的报文看不到SW1发过来的任何VRRP组播包。问题就出在中间的链路或二层策略上。顺着物理链路查下去发现两台设备之间的二层交换机端口配置了端口隔离。端口隔离本身是为了防止同一台接入交换机下的终端互访但这个隔离策略被套在了上联口上结果SW1发往224.0.0.18的VRRP组播报文被这个二层交换机直接丢弃了。SW2收不到Master的心跳等待超时后自己抢成了Master而SW1这边能收到SW2的心跳所以一直认为自己是Master两台设备就双主了。这个案例最值得记住的一点是VRRP非常依赖二层组播通信只要中间链路上有任何ACL、端口隔离、VLAN修剪、PVLAN策略都可能把VRRP报文卡住。排查双主问题时不要一上来就怀疑配置先确认心跳报文能不能在两个设备之间真正互通。4.3 几条独家避坑建议第一不要在生产环境配置明文认证。VRRPv2支持简单字符认证和MD5认证但很多现场设备间配置不一致一个小写字母打错整个VRRP组直接不工作。而且明文认证本身没有安全收益因为VRRP报文里认证字段很容易被解析。我的习惯是除非合规明确要求否则一律不配置认证把精力放在管理面安全上。第二track一定要配而且优先级下降值要算准。很多人配VRRP只调priority不配track。结果设备本身活得好好的但上行链路断了Master不知情终端流量全打到一台“内网活着、外网死了”的设备上。配置track时reduced或decrement的值必须大于本设备优先级与对端优先级的差值才能确保触发切换后对端能胜出。第三提前规划切换速度。VRRP默认1秒发一次心跳Backup要等约3.6秒才判断Master故障。对大多数办公网络来说3秒多切换一次完全可以接受。但对生产业务系统来说3秒断流可能就是不达标。这种情况下可以缩短Advertisement间隔华为支持毫秒级或者引入BFD检测把主备切换时间压缩到几百毫秒甚至更低。代价是网络里的VRRP报文变多CPU占用会上升要评估设备性能再动这个参数。第四注意VRRP版本一致。VRRPv2只支持IPv4VRRPv3同时支持IPv4和IPv6。如果一台设备默认跑v3另一台跑v2两者根本不兼容现象就是组内成员互相看不见。跨厂商设备互联时一定先确认双方版本。VRRP这套机制我用了很多年踩过的坑也都记在心里。说到底它不复杂关键是在架构设计阶段就想到“网关要冗余”而不是等事故发生后追悔莫及。如果你手里正好有两台闲置的三层设备不妨抽个维护窗口把它们组一个VRRP再演练一次主备切换感受一下那种“设备挂了但业务还在”的踏实感。这比看再多文档都管用。
返回列表