1. 为什么VRRP至今仍是网络高可用的“压舱石”
第一次接触VRRP是在一个园区网的改造项目里,核心交换机双机部署,下面挂了三十多台接入设备,用户要求“断一台核心,业务不能断”。当时我第一反应是用堆叠或者链路聚合,但堆叠对设备型号和距离有硬性要求,链路聚合只能解决链路冗余,解决不了网关单点故障。后来老工程师一句话点醒我:网关得有个“虚拟身份”,两台设备轮流当,谁活着谁顶上。这就是VRRP要干的事。
VRRP全称Virtual Router Redundancy Protocol,中文叫虚拟路由器冗余协议。它的核心思路非常朴素:把两台或多台物理设备虚拟成一台逻辑上的“虚拟路由器”,这台虚拟路由器对外暴露一个虚拟IP和一个虚拟MAC,终端设备把这个虚拟IP当作默认网关。平时由一台设备(Master)真正承担转发任务,其他设备(Backup)待命。一旦Master出问题,Backup在几秒甚至几百毫秒内接管,终端完全无感知。
这个机制解决的是网络架构里最容易被忽视却最致命的问题——网关单点故障。你可以做双上行链路、可以做端口聚合、可以做服务器双网卡,但只要网关是单台设备,这台设备一挂,整个网段全部失联。VRRP的价值就在于用协议层面的冗余,把网关这个“独木桥”变成“双通道”。
适合读这篇内容的人大概有三类:一是刚接触网络设备配置的运维新人,需要一份能直接照着敲的配置参考;二是有一定基础但没系统梳理过VRRP细节的工程师,想搞清楚优先级、抢占、认证这些参数到底怎么配合;三是准备考证或者面试的朋友,需要把VRRP的原理和实操串起来理解。我会从协议原理讲到配置实操,再到排错思路,尽量把每个参数背后的“为什么”说清楚。
2. VRRP的报文交互与状态机:Master是怎么选出来的
2.1 组播报文里的信息博弈
VRRP的运行依赖一种特殊的组播报文,目的地址是224.0.0.18,协议号112。这个报文里携带了几个关键字段:虚拟路由器ID(VRID)、优先级(Priority)、通告间隔(Advertisement Interval)、认证信息等。所有参与同一个VRRP组的设备,VRID必须一致,否则各说各话,组都建不起来。
Master设备会周期性地发送VRRP通告报文,告诉组内其他设备“我还活着”。默认间隔是1秒,这个值可以调,但调小会增加协议开销,调大则故障感知变慢。通告报文里的优先级字段决定了谁有资格当Master,范围是0到255,数值越大越优先。默认值是100,可配置范围是1到254。0和255有特殊含义:0表示设备主动放弃Master角色,255保留给IP地址拥有者(也就是虚拟IP真实配置在某台设备上的情况)。
这里有个容易混淆的点:IP地址拥有者。如果虚拟IP恰好就是某台设备的真实接口IP,那这台设备的优先级自动变成255,且不可更改。它永远是Master,除非它挂了。这种场景在实际中不多见,因为通常我们会给虚拟IP单独规划一个地址,不和物理接口IP重叠。
2.2 三种状态的流转逻辑
VRRP设备在三个状态之间切换:Initialize(初始化)、Master(主)、Backup(备)。启动后先进入Initialize,接口UP且配置完整后,根据优先级决定进入Master还是Backup。
如果优先级是255,直接进Master。否则先进入Backup,等待一个“主用超时时间”(Master_Down_Interval)。这个时间的计算公式是:3 × 通告间隔 + Skew_Time。Skew_Time是(256 - 优先级)/ 256秒。举个例子,优先级100,通告间隔1秒,Skew_Time就是(256-100)/256 ≈ 0.61秒,Master_Down_Interval就是3×1 + 0.61 = 3.61秒。也就是说,Backup要等大约3.6秒没收到Master的通告,才会认为Master挂了,然后发起选举。
选举过程很简单:优先级高的当Master,优先级相同则比较接口IP,IP大的赢。新Master产生后,会立刻发送一个通告报文,并开始响应虚拟MAC的ARP请求。这里有个细节:虚拟MAC的格式是0000-5E00-01XX,XX就是VRID的十六进制。比如VRID是1,虚拟MAC就是00-00-5E-00-01-01。终端设备ARP请求虚拟IP时,Master返回的就是这个虚拟MAC,所以终端不需要感知Master的切换。
2.3 抢占模式:主动夺回与被动等待
抢占模式是VRRP里一个很实用的开关。默认情况下,抢占是开启的。意思是,如果一台优先级更高的设备恢复了,它会主动抢回Master角色。比如原Master优先级120,重启后变成Backup,优先级100的设备正在当Master。原Master恢复后,发现自己的优先级更高,就会等待一个“抢占延时”(默认0秒),然后发送通告,重新成为Master。
抢占延时这个参数很有讲究。如果设为0,设备一恢复就抢,可能导致网络震荡——比如设备刚启动,路由还没收敛,抢过来反而丢包。通常建议设个几秒到几十秒,等设备完全稳定再抢。如果关闭抢占,高优先级设备恢复后也不会夺回Master,除非当前Master出故障。这种模式适合“主备角色固定、不希望频繁切换”的场景。
3. 配置前的规划:VRID、虚拟IP和优先级怎么定
3.1 VRID的分配不能拍脑袋
VRID是VRRP组的身份证,范围1到255。同一个广播域内,不同VRRP组的VRID必须不同,否则会冲突。比如你有两个网段,每个网段跑一组VRRP,那可以用VRID 1和VRID 2。但如果两个网段在同一个VLAN里(这种情况少见但存在),就必须用不同的VRID。
我的习惯是按VLAN ID来映射VRID。比如VLAN 10用VRID 10,VLAN 20用VRID 20。这样运维的时候一眼就能对上,排查问题也方便。如果VLAN ID超过255,那就取模或者重新规划,但尽量保持规律。
虚拟MAC是根据VRID生成的,所以VRID变了,虚拟MAC也变。如果终端设备有ARP缓存或者静态ARP绑定,改VRID会导致短暂中断。所以规划阶段就要定好,后期尽量别动。
3.2 虚拟IP的选择:独立地址还是接口地址
虚拟IP可以选两种:一种是单独规划一个没人用的IP,另一种是直接用某台设备的接口IP。前面说过,用接口IP的话,那台设备优先级自动255,永远是Master。这种模式叫“IP地址拥有者”模式,配置简单,但失去了主备灵活性——那台设备挂了,备机接管,但主机恢复后又会抢回来,因为优先级不可改。
更常见的做法是单独规划虚拟IP。比如两台核心交换机的接口IP分别是192.168.1.252和192.168.1.253,虚拟IP用192.168.1.254。终端网关指向254。这样两台设备优先级都可以手动设,主备角色可控。
虚拟IP必须和接口IP在同一个网段,不能跨网段。而且虚拟IP不能和任何设备的接口IP冲突,否则ARP会乱。配置前最好ping一下确认没人用。
3.3 优先级与抢占延时的配合
优先级默认100,建议主设备设120,备设备设100。差值不用太大,20足够。差值太大没必要,差值太小(比如101和100)容易因为计算误差导致意外切换。
抢占延时建议主设备设30秒左右。为什么?因为主设备重启后,路由协议(比如OSPF)可能需要时间收敛,接口可能还在震荡。如果立刻抢占,流量过来了但路由没准备好,反而丢包。等30秒,设备稳定了再抢,平滑过渡。
备设备的抢占延时可以设0,因为它本来优先级就低,不会主动抢。但如果备设备优先级也设了120(比如双主模式),那就要考虑两边都设延时,避免同时抢。
4. 华为设备VRRP配置实操:从接口到验证的完整链路
4.1 基础配置:主备设备的对称与不对称
华为设备的VRRP配置在接口视图下进行。假设两台核心交换机,接口VLANIF 10,IP分别是192.168.1.252和192.168.1.253,虚拟IP 192.168.1.254,VRID 10。
主设备配置:
interface Vlanif 10 ip address 192.168.1.252 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.1.254 vrrp vrid 10 priority 120 vrrp vrid 10 preempt-mode timer delay 30备设备配置:
interface Vlanif 10 ip address 192.168.1.253 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.1.254 vrrp vrid 10 priority 100注意备设备不需要配抢占延时,因为默认抢占开启且延时0,但它优先级低,不会主动抢。主设备配了30秒延时,是为了恢复后不立刻抢。
这里有个细节:虚拟IP的配置命令在两台设备上必须完全一致,包括VRID和虚拟IP地址。优先级可以不同,抢占延时可以不同,但VRID和虚拟IP必须一样,否则组建不起来。
4.2 认证配置:简单密码与MD5
VRRP支持认证,防止非法设备加入组。华为设备支持两种:简单字符认证和MD5认证。简单认证就是明文密码,MD5是哈希。配置命令:
vrrp vrid 10 authentication-mode simple cipher Huawei@123或者:
vrrp vrid 10 authentication-mode md5 cipher Huawei@123认证模式两端必须一致,密码也必须一致。如果一边配了一边没配,或者密码不同,VRRP组起不来,设备会一直停留在Initialize状态。我遇到过好几次因为密码大小写不一致导致VRRP不生效的案例,排查了半天才发现是密码问题。
注意:认证不是加密,只是防止误加入。简单认证的密码在报文里是明文传输的,MD5也只是哈希,不能防重放攻击。安全要求高的场景,建议配合其他安全机制。
4.3 监控上行接口:让VRRP感知链路故障
VRRP默认只监控自己的接口状态。如果Master的上行接口挂了,但它自己还活着,VRRP不会切换,流量到了Master却出不去,形成“黑洞”。解决方法是配置监控上行接口:
vrrp vrid 10 track interface GigabitEthernet 0/0/1 reduced 30意思是,如果GE0/0/1挂了,优先级降低30。原来120变成90,低于备设备的100,备设备就会抢占成为Master。
这个降低值要算好。主设备优先级120,备设备100,降低值必须大于20才能让备设备赢。设30是安全的。如果降低值设10,主设备变成110,还是比备设备高,不会切换。
可以监控多个接口,每个接口配不同的降低值。比如监控上行口降30,监控下行口降20。这样根据故障位置不同,切换策略也不同。
4.4 验证命令:看状态、看统计、看报文
配置完了怎么确认生效?几个常用命令:
display vrrp看VRRP组的状态,Master还是Backup,优先级多少,虚拟IP是什么。
display vrrp statistics看收发报文统计,有没有收到通告,有没有认证失败。
display vrrp interface Vlanif 10 verbose看详细状态,包括抢占模式、延时、监控接口等。
如果状态一直是Initialize,检查接口是否UP、VRID是否冲突、认证是否一致。如果状态是Backup但一直不切换,检查优先级和抢占配置。如果切换了但业务不通,检查虚拟MAC是否学到、ARP是否正常。
5. 排错实录:那些年VRRP不切换的奇葩原因
5.1 优先级相同导致的“双Master”
有一次客户反馈网络时通时断,排查发现两台设备都认为自己是Master。原因是优先级都设了100,而且接口IP很接近,选举的时候IP大的赢了,但另一台没收到通告(因为链路问题),也认为自己是Master。结果两个Master同时响应ARP,终端ARP表乱跳。
解决办法:优先级必须拉开差距,至少差20。同时检查链路,确保通告报文能正常收发。如果链路本身有问题,VRRP再牛也没用。
5.2 监控接口配置了但没生效
另一个案例:主设备上行口挂了,但VRRP没切换。检查配置发现track命令配了,但降低值设的是10,主设备优先级120降成110,还是比备设备100高,所以没切。改成30后正常。
还有个坑:track的接口如果本身是down的,配置的时候可能不生效。要先确保接口UP,再配track。或者用track nqa之类的联动,但那是进阶用法。
5.3 认证密码的“隐形字符”
最坑的一次:两台设备认证密码看起来一样,但就是不生效。后来用display current-configuration一看,一边密码末尾多了个空格。复制粘贴的时候带进去的。删掉空格后正常。
所以配置认证的时候,尽量用cipher参数,华为设备会加密显示,避免明文对比出错。如果必须用simple,配置完用display确认一下,看有没有多余字符。
5.4 虚拟MAC冲突导致的ARP异常
虚拟MAC是根据VRID生成的,如果两个VRRP组用了同一个VRID,虚拟MAC就一样。如果这两个组在同一个广播域,终端ARP表就会混乱。比如VLAN 10用VRID 10,VLAN 20也用VRID 10,但两个VLAN在同一个物理网络里(比如都走同一个Trunk),就会冲突。
解决办法:VRID全局唯一,至少在同一广播域内唯一。规划的时候画个表,把VLAN、VRID、虚拟IP、虚拟MAC都列出来,避免冲突。
6. 进阶玩法:VRRP与BFD联动、多组负载分担
6.1 BFD联动:把切换时间压到毫秒级
VRRP默认的故障检测靠通告超时,最快也要1秒左右(通告间隔可以调到最小1秒,但Master_Down_Interval至少3秒)。对于金融、医疗等对中断极度敏感的场景,3秒太长了。这时候可以用BFD(Bidirectional Forwarding Detection)联动。
BFD是一种快速检测协议,可以在毫秒级检测到链路故障。配置VRRP与BFD联动后,BFD会话一断,VRRP立刻切换,不用等通告超时。华为配置示例:
bfd vrrp vrid 10 track bfd-session 1具体配置涉及BFD会话的建立,这里不展开,但思路是:用BFD做快速检测,VRRP做角色切换,两者配合,切换时间可以压到50毫秒以内。
6.2 多组负载分担:让备机也干活
默认情况下,备机是闲置的,浪费资源。如果有多台设备,可以配多个VRRP组,让不同组的主设备分散在不同物理设备上。比如两台核心交换机,配两个VRRP组:组1的主是设备A,组2的主是设备B。终端一半用组1的虚拟IP做网关,一半用组2的。这样两台设备都在转发流量,资源利用率翻倍。
配置要点:每个组独立配VRID、虚拟IP、优先级。设备A在组1优先级120,在组2优先级100;设备B反过来。这样组1的Master是A,组2的Master是B。终端网关可以手动分,也可以通过DHCP分配不同的网关。
这种模式叫“负载分担”或“多主模式”,适合流量大、设备多的场景。但要注意:每个组的虚拟IP必须不同,终端配置也要对应。如果终端是DHCP获取网关,需要在DHCP服务器上配两个地址池,或者用Option字段指定。
6.3 VRRP与MSTP的配合
在二层网络中,VRRP常和MSTP(多生成树协议)配合使用。MSTP负责破环和负载分担,VRRP负责网关冗余。如果MSTP的根桥和VRRP的Master不在同一台设备上,流量可能绕路。比如MSTP根桥是设备A,但VRRP Master是设备B,终端流量先到A,再到B,多了一跳。
优化方法是:让MSTP根桥和VRRP Master在同一台设备上。比如设备A是VLAN 10的MSTP根桥,那设备A也做VLAN 10的VRRP Master。这样流量路径最优。配置的时候,MSTP优先级和VRRP优先级要对应调整。
7. 我在实际项目里踩过的坑和攒下的经验
第一个经验:配置前先画拓扑图。把设备、接口、IP、VRID、优先级、虚拟IP都标上,贴到机柜上。后期维护的时候,不用登录设备就能知道大概配置。我见过太多项目,配置完没文档,半年后没人记得VRID是多少,改的时候提心吊胆。
第二个经验:切换测试必须做。配置完VRRP,一定要手动断掉主设备的上行口或者直接关机,看备设备能不能接管,终端业务是否中断。测试的时候用长ping,比如ping 1000个包,看丢几个。正常切换丢1到3个包算合格,丢多了说明有问题。
第三个经验:日志和告警要配。VRRP切换是有日志的,华为设备默认会记录。但很多人不看日志,出了问题才去翻。建议配个SNMP告警或者Syslog服务器,VRRP状态一变就发通知。这样能第一时间知道网络发生了切换,及时排查原因。
第四个经验:版本兼容性要注意。不同厂商、不同型号的设备,VRRP实现可能有差异。比如VRRPv2和VRRPv3的报文格式不同,混用可能不兼容。华为设备默认是VRRPv2,如果和别的厂商对接,要确认版本。VRRPv3支持IPv6,VRRPv2只支持IPv4。如果网络里有IPv6,要用VRRPv3。
第五个经验:虚拟IP不要配在管理网段。有些工程师图省事,把虚拟IP配在管理网段,结果VRRP切换导致管理IP也变,远程登录断了,没法排查。建议虚拟IP和业务网段一致,管理网段单独规划,不要混用。
第六个经验:抢占延时不是越长越好。设太长,主设备恢复了半天不抢,备设备一直扛着,如果备设备性能不如主设备,业务会受影响。设太短,主设备没稳定就抢,容易震荡。一般30到60秒比较合适,具体看设备启动和路由收敛时间。
第七个经验:注意VRRP和STP的收敛时间。如果VRRP切换了,但STP还没收敛,流量可能走错路。特别是在MSTP环境里,VRRP切换后,STP拓扑可能还没更新,导致短暂环路或丢包。解决办法是配STP的快速收敛机制,比如RSTP或者MSTP的快速迁移。
第八个经验:虚拟MAC不要静态绑定。有些工程师为了“稳定”,在终端上静态绑定虚拟MAC和虚拟IP。结果VRRP切换后,虚拟MAC不变,但物理设备变了,终端还是能通。但如果虚拟MAC变了(比如改了VRID),终端就断了。所以不建议静态绑定,让ARP动态学习就好。
第九个经验:多组VRRP的优先级要错开。如果一台设备跑了多个VRRP组,每个组的优先级要统一规划。比如设备A在组1是120,组2是100;设备B在组1是100,组2是120。这样角色清晰,不会出现一台设备全是Master或者全是Backup的情况。如果一台设备全是Master,另一台全是Backup,负载不均衡,浪费资源。
第十个经验:定期检查VRRP状态。网络稳定的时候,没人会去看VRRP。但设备重启、链路抖动、配置变更都可能导致VRRP状态异常。建议每月巡检一次,用display vrrp看看状态是否和规划一致。如果发现备设备变成了Master,要查原因,可能是主设备出过问题。
这些经验都是实打实踩出来的,有些是半夜被叫起来排查故障换来的。VRRP本身不复杂,但细节多,配错一个参数就可能不生效。希望这篇内容能帮你少走点弯路,一次配通。