1. 从单点故障到高可用为什么我们需要VRRP如果你负责过公司网络或者稍微大一点的局域网肯定遇到过这样的场景核心交换机或者出口路由器就那么一台一旦它出点问题比如硬件故障、软件升级重启整个网段甚至整个公司的网络就“失联”了。用户上不了网业务系统访问不了电话瞬间被打爆。这种单点故障带来的业务中断是网络运维中最头疼、也最需要优先解决的问题之一。解决这个问题的核心思路就是引入冗余备份。简单来说就是准备一台或多台备份设备在主设备故障时能立刻顶上。但这里有个关键问题IP地址怎么切换用户的网关地址比如192.168.1.1是配置在主设备上的当主设备宕机就算备份设备物理上在线用户的数据包还是会发往那个已经失效的IP地址网络依然不通。手动去改用户的网关配置这显然不现实。VRRPVirtual Router Redundancy Protocol虚拟路由器冗余协议就是为了解决这个“IP地址切换”问题而生的。它通过将多台物理路由器或三层交换机虚拟成一台“虚拟路由器”并为这个虚拟路由器分配一个虚拟IP地址Virtual IP VIP。这个VIP就是用户配置的网关地址。VRRP协议会在多台设备之间选举出一台作为“主Master”设备由它来实际负责转发发送到VIP的流量。其他设备则作为“备Backup”设备处于待命状态。一旦主设备发生故障备份设备会通过协议机制迅速感知并重新选举出新的主设备来接替工作。对于用户和上层网络来说网关的IP地址VIP始终没有变化只是背后负责转发的物理设备换了这个过程对用户是完全透明的业务中断时间可以控制在秒级甚至亚秒级。这就像是一个团队的“代理组长”。团队对外有一个固定的接口人VIP团队内部会选举出一个真正的组长Master来行使职权。如果现任组长请假或离职故障团队会立刻内部投票选出新的组长Backup升为Master而对外接口人保持不变外部协作完全不受影响。理解了VRRP要解决的痛点我们再来看看它具体是怎么运作的。2. VRRP协议的核心工作原理拆解VRRP的原理并不复杂但里面的几个核心概念和状态机是理解其稳定性的关键。很多人配置命令时出错往往是因为对底层原理一知半解。2.1 核心概念与角色在一个VRRP组VRRP Group中主要涉及以下几个角色和参数虚拟路由器Virtual Router这是一个逻辑概念由同一个VRRP组内的所有物理路由器共同组成。它对外表现为一个单一的路由节点。虚拟IP地址Virtual IP VIP这是虚拟路由器的IP地址也就是网络中终端设备设置的默认网关地址。一个VRRP组必须至少有一个VIP并且该VIP必须与组内物理路由器接口的IP地址在同一网段。物理路由器角色Master主路由器在VRRP组中承担实际流量转发任务的路由器。它响应发送到VIP的ARP请求并转发目的IP是VIP的数据包。每个VRRP组在任一时刻有且只有一个Master。Backup备份路由器监听Master的状态随时准备在Master故障时接替其工作。一个VRRP组可以有一台或多台Backup路由器。VRIDVRRP路由器标识符一个1-255的数字用于区分同一个网段内的不同VRRP组。例如你可以为市场部创建一个VRID为10的组为研发部创建一个VRID为20的组实现流量的负载分担或相互备份。优先级Priority范围是1-254默认100用于在初始状态或Master失效时选举Master。优先级越高越容易成为Master。如果优先级相同则比较接口的主IP地址大小IP地址大的成为Master。抢占模式Preemption默认开启。当一台更高优先级的Backup路由器上线时它会抢占当前Master的角色自己成为新的Master。如果关闭抢占则只要当前Master不故障即使有更高优先级的设备加入也不会发生切换。2.2 VRRP报文与状态机VRRP路由器之间通过定时发送VRRP通告报文Advertisement来通信。这个报文是组播报文目的地址是224.0.0.18协议号是112。报文里包含了VRID、优先级、认证信息、主IP地址发送报文的物理接口IP和虚拟IP地址列表等关键信息。每台VRRP路由器都维护着一个状态机这是协议稳定运行的核心初始化Initialize设备刚启动VRRP功能或者接口Down掉时进入此状态。在此状态下设备不处理VRRP报文也不会响应VIP的ARP请求。可以理解为“未就绪”状态。备份Backup设备确定本组内存在Master自己作为备份。在此状态下设备会监听Master发来的VRRP通告报文。如果超过一定时间称为Master_Down_Interval没有收到Master的通告就会认为Master失效状态转移到Master。主用Master设备成功竞选为Master。它会周期性默认1秒发送VRRP通告报文告诉组内其他成员“我还活着”。同时它会响应发送到VIP的ARP请求发送的ARP回复中源MAC地址是虚拟MAC地址并开始转发目的IP是VIP的流量。状态转移的关键触发条件Initialize - Backup接口UP并且VRRP配置生效。Backup - Master在Master_Down_Interval时间内没有收到Master发来的VRRP通告。这个时间通常是3 * Advertisement_Interval Skew_time其中Skew_time是一个与优先级相关的微小偏移量用于确保优先级高的设备能更快超时。默认情况下大约是3秒多一点。Master - Backup收到了优先级更高如果开启抢占或相等的VRRP通告报文在优先级相同时需要比较IP地址但通常由优先级决定。任何状态 - Initialize接口Down或者VRRP配置被删除。这个状态机机制保证了只要Master还能正常工作能周期性发送通告Backup就会安心等待。一旦Master“失声”Backup们就会迅速启动选举流程优先级最高的Backup将胜出成为新的Master从而实现快速故障切换。2.3 虚拟MAC地址的妙用这是一个容易被忽略但非常重要的细节。VRRP组在选举出Master后会生成一个特殊的虚拟MAC地址格式为00-00-5E-00-01-{VRID}。例如VRID为1的组虚拟MAC是00-00-5E-00-01-01。这个虚拟MAC地址有什么用呢 当Master路由器收到一个发往VIP的ARP请求比如用户PC刚开机在问“谁是192.168.1.1”时Master会以虚拟MAC地址作为源MAC进行回复。这样局域网内所有终端学习到的网关VIP对应的MAC地址都是这个虚拟MAC地址。带来的好处是巨大的无论VRRP组内哪台物理设备成为Master终端设备的ARP表项都不需要更新因为终端记录的始终是那个固定的虚拟MAC地址。当发生主备切换时新的Master会继续使用同一个虚拟MAC地址来响应ARP和转发数据。这避免了因主备切换导致的终端ARP表项过期、需要重新学习的问题进一步缩短了业务中断时间。3. 主流厂商VRRP基础配置命令详解理解了原理配置起来就心中有数了。虽然不同厂商华为、H3C、锐捷等的命令行界面略有差异但核心配置思路是相通的。这里我们以最常见的华为/H3C的VRRP配置为例因为其命令体系在国产设备中应用最广同时也会简要对比其他厂商。注意以下配置均假设接口已配置好IP地址并已处于UP状态。3.1 华为/H3C交换机VRRP配置华为和H3C华三的命令高度相似可以放在一起看。假设我们有两台三层交换机SW1和SW2作为用户网关接口VLANIF 10的IP地址分别是192.168.1.2/24和192.168.1.3/24。我们要为网段192.168.1.0/24创建一个VRID为1的备份组虚拟IPVIP为192.168.1.1。目标让SW1平时作为Master优先级设为120SW2作为Backup优先级保持默认100。当SW1故障时SW2接替。SW1预设Master配置system-view sysname SW1 interface Vlanif 10 ip address 192.168.1.2 24 vrrp vrid 1 virtual-ip 192.168.1.1 # 创建VRRP组1并配置虚拟IP vrrp vrid 1 priority 120 # 设置优先级为120高于默认值100确保其成为Master vrrp vrid 1 preempt-mode timer delay 0 # 开启抢占模式默认开启延迟0秒立即抢占 vrrp vrid 1 track interface GigabitEthernet 0/0/1 reduced 30 # 可选上行链路跟踪vrrp vrid 1 virtual-ip 192.168.1.1: 这是最核心的命令创建了VRRP组并绑定了VIP。vrrp vrid 1 priority 120: 将本设备在组1中的优先级设置为120。在初始选举或抢占时优先级高的胜出。preempt-mode timer delay 0: 配置抢占延迟。delay 0表示立即抢占。如果设置为delay 5则表示高优先级设备上线后会等待5秒再发起抢占这可以避免网络震荡。track interface ... reduced 30: 这是一个高级且极其实用的配置。它监控上行接口G0/0/1的状态。如果该接口Down掉即使SW1本身没问题但已无法访问外网此时它的VRRP优先级会自动降低30从120降到90。这样SW2优先级100就会因为优先级更高而抢占成为Master将流量引导到健康的路径上。这是实现链路级而不仅仅是设备级高可用的关键。SW2预设Backup配置system-view sysname SW2 interface Vlanif 10 ip address 192.168.1.3 24 vrrp vrid 1 virtual-ip 192.168.1.1 # 必须配置相同的VRID和VIP # 不配置priority则使用默认值100 # 默认抢占模式是开启的这里也可以显式配置 vrrp vrid 1 preempt-mode timer delay 0配置验证命令配置完成后使用以下命令查看状态这是排错和日常检查的基础。display vrrp brief # 查看所有VRRP组的简要状态快速确认Master/Backup角色和VIP display vrrp # 查看更详细的VRRP状态信息包括优先级、通告间隔、认证等 display vrrp statistics # 查看VRRP报文统计信息用于排查协议通信问题在SW1上执行display vrrp brief你应该能看到VRID 1的状态是Master虚拟IP是192.168.1.1。在SW2上状态应是Backup。3.2 锐捷交换机VRRP配置锐捷交换机的配置逻辑类似但命令语法不同。同样场景下SW1锐捷预设Master配置configure terminal hostname SW1 interface vlan 10 ip address 192.168.1.2 255.255.255.0 vrrp 1 ip 192.168.1.1 # 创建VRRP组1并配置虚拟IP vrrp 1 priority 120 # 设置优先级 vrrp 1 preempt # 开启抢占默认可能开启建议显式配置 vrrp 1 track interface GigabitEthernet 0/1 decrement 30 # 上行接口跟踪SW2锐捷预设Backup配置configure terminal hostname SW2 interface vlan 10 ip address 192.168.1.3 255.255.255.0 vrrp 1 ip 192.168.1.1锐捷查看命令show vrrp brief show vrrp detail3.3 思科交换机VRRP配置思科设备上类似的协议是HSRP热备份路由协议但思科IOS也支持标准的VRRP。配置命令又有不同SW1思科预设Master配置configure terminal hostname SW1 interface Vlan10 ip address 192.168.1.2 255.255.255.0 vrrp 1 ip 192.168.1.1 # 配置虚拟IP vrrp 1 priority 120 # 设置优先级 vrrp 1 preempt # 开启抢占 track 1 interface GigabitEthernet0/1 line-protocol # 定义跟踪对象 vrrp 1 track 1 decrement 30 # 将跟踪对象与VRRP组关联并设置优先级降低值思科查看命令show vrrp brief show vrrp detail从以上对比可以看出虽然命令关键字 (vrrp vridvsvrrpvsvrrp) 和跟踪命令的语法 (track interface ... reducedvstrack ... decrement) 有差异但核心参数VRID/组号、VIP、优先级、抢占、跟踪是所有厂商VRRP配置的通用概念。掌握一家触类旁通。4. 从理论到实战一个典型的企业网关冗余配置案例光看命令不够我们用一个更贴近实际网络拓扑的案例把配置串起来并解释每一步的意图。这个案例模拟了一个典型的中小型企业网络出口。网络拓扑与需求两台企业出口路由器R1和R2通过两条上行链路分别连接到两个不同的运营商电信、联通。内网用户网关位于192.168.1.0/24网段。要求正常情况下所有用户流量通过R1电信链路出去R1作为主网关。当R1或其上行链路故障时流量自动切换到R2联通链路。切换过程对用户透明且尽可能快速。同时内网服务器区10.10.10.0/24的网关也需做冗余但希望正常情况下由R2承担实现一定程度的负载分担。配置思路分析为不同网段创建不同的VRRP组这是实现负载分担的基础。我们可以为用户网段创建VRID 10为服务器网段创建VRID 20。通过优先级控制主备在VRID 10中将R1的优先级设高如120使其成为MasterR2为默认100。在VRID 20中将R2的优先级设高使其成为Master。配置上行链路跟踪这是实现智能切换的灵魂。在R1上跟踪其连接电信的出口接口如果该接口故障则降低R1在VRID 10中的优先级促使R2接管用户流量。反之在R2上跟踪其连接联通的接口。考虑抢占通常需要开启抢占以便故障恢复后流量能切回最优路径。具体配置步骤以华为设备为例步骤一基础接口IP配置# 在R1上配置 system-view interface GigabitEthernet 0/0/0 # 连接内网交换机的接口 ip address 192.168.1.2 24 ip address 10.10.10.2 24 secondary # 服务器网段IP作为备用 interface GigabitEthernet 0/0/1 # 连接电信的出口 ip address 100.1.1.1 30 # 在R2上配置 system-view interface GigabitEthernet 0/0/0 # 连接内网交换机的接口 ip address 192.168.1.3 24 ip address 10.10.10.3 24 secondary # 服务器网段IP作为备用 interface GigabitEthernet 0/0/1 # 连接联通的出口 ip address 200.1.1.1 30步骤二配置VRRP实现网关冗余与负载分担# 在R1上配置VRRP interface GigabitEthernet 0/0/0 # 为用户网段192.168.1.0/24配置VRRPR1作为主设备 vrrp vrid 10 virtual-ip 192.168.1.1 vrrp vrid 10 priority 120 vrrp vrid 10 preempt-mode timer delay 2 # 延迟2秒抢占避免频繁震荡 vrrp vrid 10 track interface GigabitEthernet 0/0/1 reduced 40 # 跟踪电信出口故障时优先级降40120-80 # 为服务器网段10.10.10.0/24配置VRRPR1作为备设备 vrrp vrid 20 virtual-ip 10.10.10.1 # 不配置priority使用默认100低于R2的120 # 在R2上配置VRRP interface GigabitEthernet 0/0/0 # 为用户网段192.168.1.0/24配置VRRPR2作为备设备 vrrp vrid 10 virtual-ip 192.168.1.1 # 不配置priority使用默认100 # 为服务器网段10.10.10.0/24配置VRRPR2作为主设备 vrrp vrid 20 virtual-ip 10.10.10.1 vrrp vrid 20 priority 120 vrrp vrid 20 preempt-mode timer delay 2 vrrp vrid 20 track interface GigabitEthernet 0/0/1 reduced 40 # 跟踪联通出口步骤三配置路由关键但易忽略的一步VRRP只解决了网关IP的冗余问题数据包被送到Master路由器后如何出去需要配置路由。# 在R1上配置默认路由指向电信下一跳 ip route-static 0.0.0.0 0.0.0.0 100.1.1.2 # 在R2上配置默认路由指向联通下一跳 ip route-static 0.0.0.0 0.0.0.0 200.1.1.2这样当R1是用户网段VRID 10的Master时用户流量到达R1后能通过其默认路由从电信出口发出。当发生切换R2成为Master后用户流量到达R2则通过R2的默认路由从联通出口发出。最终效果正常情况用户PC网关192.168.1.1的流量由R1Master for VRID 10处理走电信出口。服务器网关10.10.10.1的流量由R2Master for VRID 20处理走联通出口。实现了出口链路的负载分担。R1电信出口故障R1的VRID 10优先级降至80。R2优先级100抢占成为VRID 10的新Master。用户流量自动切换到R2并通过R2的联通出口出去。服务器流量不受影响。R1整机故障R2收不到R1的VRRP通告超时后直接成为VRID 10和VRID 20的Master接管所有流量。这个案例清晰地展示了如何将VRRP的基础命令组合起来解决一个实际的、稍复杂的网络高可用需求。其中“不同VRID实现负载分担”和“Track跟踪实现链路级故障切换”是两个最重要的实战技巧。5. 配置中的“坑”与排错指南即使理解了原理照着案例配置在实际环境中依然可能遇到问题。下面分享几个我踩过的坑和对应的排查思路。5.1 常见配置错误与现象VRID或VIP配置不一致这是最常犯的低级错误。组内所有设备上同一个VRID对应的VIP必须完全相同。如果R1配置的VIP是192.168.1.1而R2配置的是192.168.1.254那么这两台设备会各自形成一个独立的VRRP组各自认为自己是Master形成“双主”冲突。终端会因为收到两个网关的ARP回复而产生混乱。排查命令在两台设备上分别执行display vrrp brief仔细核对VRID对应的Virtual IP是否一致。接口IP与VIP不在同一网段VRRP要求虚拟IP必须与物理接口的IP地址在同一网段。如果你接口IP是192.168.1.2/24却配置虚拟IP为192.168.2.1配置通常会失败或者协议状态异常。排查命令display ip interface brief查看接口IP与display vrrp输出的VIP进行比对。优先级与抢占设置矛盾导致震荡假设R1优先级120R2优先级100都开启了抢占。如果R1的上行链路不太稳定比如光模块偶尔闪断导致其track的优先级频繁在120和80之间跳动。当优先级降到80时R2100抢占成为Master当R1链路恢复优先级回到120又立刻抢占回来。这就造成了主备频繁切换网络震荡。解决方案为preempt-mode设置一个合理的延迟时间例如delay 5。这样当R1优先级恢复后会等待5秒再发起抢占给网络一个稳定的时间窗口。或者仔细检查上行链路物理状态解决不稳定的根本原因。防火墙或ACL拦截了VRRP报文VRRP使用组播地址224.0.0.18。如果在路由器之间的链路上或者在交换机上配置了ACL或防火墙策略意外地过滤了这个组播地址那么Backup设备将收不到Master的通告导致误认为Master宕机而发起不必要的切换。排查命令使用display vrrp statistics查看报文收发计数。如果Backup设备长期收不到报文CheckSum Errors或Packet Recv计数不增长就需要检查中间网络的组播报文通行情况。在交换机上确保相关VLAN或端口允许该组播流量通过。5.2 系统性排错流程当VRRP出现异常如主备状态不符合预期、切换不成功时可以遵循以下流程排查检查物理层与链路层这是所有网络问题排查的第一步。确认设备之间物理连接正常接口处于UP/UP状态。display interface brief。检查三层连通性确保运行VRRP的接口之间IP层能互通。可以在两台设备的VRRP接口上互相ping一下对方的真实IP地址。验证基础配置display vrrp brief快速查看所有VRRP组的状态、虚拟IP和Master设备。确认状态是否符合设计谁应该是Master。display vrrp查看指定VRID的详细信息。重点检查Config Pri和Run Pri配置优先级和运行优先级是否一致如果运行优先级因Track而降低这里会显示出来。Preempt Mode抢占模式是否开启Delay Time是多少Virtual IP是否配置正确且一致Master IP当前Master设备的接口IP是多少是否是你期望的那台设备检查协议报文display vrrp statistics查看VRRP报文的收发、错误统计。如果Packet Recv计数为0或极低说明报文可能被阻塞或丢失。可以开启调试信息生产环境慎用debugging vrrp packet。在备份设备上观察是否能收到来自Master的Advertisement报文。检查Track状态如果配置了接口跟踪使用display track all或display vrrp track查看跟踪项的状态。确认跟踪的接口状态是否正常优先级扣除值是否正确应用。模拟故障测试在维护窗口内进行测试。手动shutdown主设备的VRRP接口或上行跟踪接口观察备份设备的状态切换是否及时通常在3秒左右并使用ping -tWindows或ping -iLinux持续ping虚拟IP观察丢包情况。VRRP的配置本身不复杂但把它放在真实的网络环境中与物理链路、路由协议、安全策略协同工作时就需要我们对整个数据转发路径有清晰的认识。排错的过程其实就是沿着“物理链路 - 三层IP - VRRP协议报文 - 协议状态与选举 - 最终转发”这条路径逐段检查验证。