ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

VRRP+MSTP双冗余实验:华为园区网高可用从原理到排障

VRRP+MSTP双冗余实验:华为园区网高可用从原理到排障

做网络实验这么多年,要说最值得花时间亲手敲一遍的组合,VRRP+MSTP这个“双冗余”方案绝对排在前列。标题看起来只是两个协议缩写,但放进一套华为实验环境里实际操作下来,你会发现二层冗余和三层冗余的协同机制、故障切换的细节、甚至排障时的判断逻辑,全都串在了一起。这篇文章我就以一套双核心、双接入的园区网拓扑为例,把VRRP+MSTP综合实验从原理到配置、从验证到排障完整过一遍。

这套实验解决的痛点其实非常现实:网络里有多个VLAN、多台核心交换机、多条上联链路时,网关挂了怎么办?二层环路怎么消除?两条链路只走一条岂不是浪费?VRRP负责让两台三层设备共享一个虚拟网关,做到“网关不裸奔”;MSTP负责在多个VLAN场景里让不同VLAN走不同链路,既能防环又能负载分担。两个协议叠加起来,就是一个典型的高可用网络模型。这篇文章适合刚学完网络基础想进阶的朋友,也适合正在备考认证、想在模拟器里做综合练习的人,老手也可以看看我在排障环节踩过的那些坑。

1. 这个实验到底在解决什么问题

1.1 一个典型的单点故障场景

想象一下某公司的网络,终端分布在好几栋楼,核心层两台交换机,汇聚层、接入层各有若干台。如果只给一台核心交换机配了业务网关,它一旦宕机,整个网段的终端全部断网;如果接入交换机到核心只有一根线,这根线被施工挖断,业务也得停。传统STP能防环路,但大量VLAN共用一棵树,很多链路被阻塞,带宽资源白白浪费。这个实验想要模拟的,就是在这种“既要有冗余、又要尽量不浪费链路”的要求下,怎么把网络调成一台设备故障时业务依然在线、平时流量又能分流的状态。

我在设计实验时选了4台交换机,两台做核心、两台做接入,核心之间、接入到核心之间都用双链路互连。这样的拓扑在真实场景里非常常见,交换机数量也不多,eNSP启动起来很轻松。不要小看这4台设备组成的“小网络”,它把生产环境里最核心的冗余设计逻辑都浓缩进去了。

1.2 VRRP和MSTP各自负责什么

虚拟路由冗余协议(VRRP)解决的是三层网关冗余问题:多台路由器或三层交换机组成一个VRRP组,对外提供一个虚拟IP作为终端网关。实际只有一台Master在工作,其余Backup在监听,Master故障后Backup自动接手,终端感知到的网关地址始终不变。MSTP(多生成树协议)解决的是二层问题:它在交换机之间通过BPDU协商出一棵无环的逻辑树,不同VLAN可以映射到不同实例,每个实例独立计算阻塞端口,从而实现链路负载分担。两者一上一下,正好把三层和二层的高可用都覆盖了。

打个比方:VRRP像是给一栋楼备了两个前台,对外只有一个总机号码,一个前台忙的时候另一个能立刻顶上;MSTP则像是给楼里的不同部门规划了不同的疏散通道,避免所有人挤在同一条走廊里,也让楼里不会因为走不通而出现混乱。两套机制各管各的,但要配合得好,得遵循后面讲的“主备对齐”原则。

1.3 这次实验适合谁

如果你是刚开始学交换技术的阶段,建议先把STP/RSTP、VRRP单点实验做熟,再来碰这个综合实验。这个实验的价值不在于命令本身有多难,而在于它强迫你理解“链路状态”与“网关状态”之间的联动关系:为什么根桥要跟着VRRP Master走?为什么VLAN要映射到不同实例?为什么一条链路断了之后,阻塞端口会切换、VRRP组成员会变化?这些问题的答案,都是靠自己做一遍实验、再亲手制造故障才能体会到的。只会背配置命令不够,能解释清楚“故障发生后流量绕到了哪里”,才算真正吃透。

2. 核心原理拆解:VRRP和MSTP怎么配合

2.1 VRRP的选举与工作流程

VRRP的工作机制可以类比成小区门口的两个保安。对外只公布一个“门牌号”(虚拟IP),业主们只认这个门牌号;平时由其中一个保安(Master)出来接待,另一个(Backup)在旁边待命。Master每隔一秒发送一次VRRP通告报文(目的组播地址224.0.0.18),告诉Backup“我活着”。如果Backup连续3秒收不到通告,就会立刻接管虚拟IP,成为新的Master。

选举Master时,优先级(1~254,默认100)最大的设备胜出;优先级相同时,接口IP更大的设备胜出。实验里为了明确主备关系,通常会把一台核心的优先级调高,比如120,另一台保持默认。这里有一个很容易被人忽略的点:VRRP默认是开启抢占的,也就是说现在Master的优先级更高时,它会把当前的Master抢过来。这在设备上线、网络抖动的场景下会引起不必要的切换,所以生产环境一般会配置抢占延时,比如20秒,让设备稳定后再接管。

华为设备上查看VRRP状态用的是display vrrp,输出里的State字段会明确显示Master还是Backup。我实验时习惯清空后再看,有时候因为配置没刷新,容易误判。

2.2 MSTP的多实例与根桥选举

MSTP在RSTP的基础上引入了“实例”的概念。实例可以理解成独立的生成树,每个实例可以绑定一批VLAN,VLAN的数据就在各自实例的树内转发。华为交换机默认所有VLAN都挂在实例0上,你如果想让VLAN 10走实例1、VLAN 20走实例2,就必须在MSTP域配置里把它们分别映射进去。

MSTP还有“域”的概念,类似给一组交换机贴相同的标签:区域名(region-name)、修订级别(revision-level)和实例与VLAN的映射关系必须完全一致,设备才会认为彼此在同一个域里。否则BPDU虽然能互通,但MSTP计算出来的生成树会不一致,很多新手在这里翻车。域内每个实例独立选举根桥,根桥优先级的默认值是32768,配置了stp instance 1 root primary之后,优先级会变成0,配置root secondary会变成4096,这样就能人为地把不同实例的根桥固定到不同核心上。

根桥的位置决定了所有二层流量的汇聚方向。接入交换机上拿到最优BPDU的那个端口会成为根端口(Root),次优路径会变成Alternate口并处于阻塞状态。这就解释了为什么MSTP能实现负载分担:只要让VLAN 10和VLAN 20的根桥分别落在两台核心上,接入交换机就会为不同实例选择不同的上联口作为根端口,另一个实例则走另一条上联。

2.3 主备对齐:二层根桥要跟三层Master站在一起

这是整个实验最核心的一条设计原则。如果没有把VRRP Master和MSTP实例根桥放在同一台设备上,会让流量绕远路。举个例子:VLAN 10的VRRP Master在SW1,但实例1的根桥在SW2。终端要访问外网时,二层流量顺着MSTP树先汇聚到根桥SW2,再由SW2经核心间链路送到SW1上的网关,SW1转发出去以后,回程报文又要从SW1绕回根桥SW2才能进入二层网络。一来一回,核心间链路带宽被白白占用,时延也增加了。万一核心间链路出了故障,业务会直接中断。

所以规范的做法是:VLAN 10的VRRP Master和实例1的根桥都放在SW1,VLAN 20的VRRP Master和实例2的根桥都放在SW2,两台核心互为备份、各司其职。这样每个VLAN从二层到三层都是“一条直线”,出故障时另一台核心又能完整接管。做综合实验时,这个对齐关系一定要先在规划表里写清楚,别到了配命令的时候再临场拍脑袋。很多真实网络卡顿查不出原因,最后发现就是根桥和Master位置错开导致的绕路。

3. 实验拓扑和地址规划

3.1 拓扑结构和接口连接

我使用的是华为eNSP模拟器,交换机型号选S5700系列。拓扑如下:SW1和SW2为核心层,SW3和SW4为接入层。SW1与SW2之间用GE0/0/3互连,SW1的GE0/0/1接SW3的GE0/0/1,SW1的GE0/0/2接SW4的GE0/0/1,SW2的GE0/0/1接SW3的GE0/0/2,SW2的GE0/0/2接SW4的GE0/0/2。每对上联都是Trunk,放行实验涉及的所有VLAN。

PC1连接在SW3的GE0/0/3上,划入VLAN 10;PC2连接在SW4的GE0/0/3上,划入VLAN 20。核心之间的链路也是Trunk。这样画出来之后,SW3—SW1—SW2—SW3本身是一个环,SW4—SW1—SW2—SW4同样是一个环,MSTP会在这些环上选择性地阻塞端口,防止广播风暴。这里要注意,接入交换机到核心的两条上联不能只考虑“一个VLAN走一条线”,因为Trunk放行的是两个VLAN,MSTP实例决定谁在哪条链路上转发。

3.2 地址、VLAN、VRID和MSTP实例规划表

在做实验之前,我建议先把规划表写出来,避免配置一半又回头改。以下是我这次实验的参数:

参数项VLAN 10VLAN 20
网段192.168.10.0/24192.168.20.0/24
终端PCPC1: 192.168.10.10/24PC2: 192.168.20.10/24
虚拟网关192.168.10.254192.168.20.254
VRRP组编号VRID 1VRID 2
SW1角色Master(优先级120)Backup(默认100)
SW2角色BackupMaster(优先级120)
MSTP实例Instance 1Instance 2
SW1根桥角色实例1主根实例2备根
SW2根桥角色实例1备根实例2主根

从表里能直接看出来主备对齐的设计思路:VLAN 10的主网关和主根都在SW1,VLAN 20的主网关和主根都在SW2。SW1和SW2各自的Vlanif接口地址分别配置为192.168.10.1、192.168.20.1和192.168.10.2、192.168.20.2。虚拟IP不占用接口IP,接口IP是为了让设备本身参与三层通信,也可以用于管理。

3.3 环境准备与基础链路检查

开始配置之前,先把4台交换机的接口up状态确认一下。eNSP启动后等设备运行到能登录再配置,设备没起来就敲命令容易出现命令丢失的情况。特别提醒一下:eNSP里有些设备的STP默认是启用的,有些版本默认关闭,最好进入系统视图后执行display stp先看一眼,如果显示STP未使能,后面再手动执行stp enable。

先做最基础的链路检查,在所有Trunk口上配置好VLAN放行之后,我一般会在SW3上执行display port vlan,确认上行接口已经把VLAN 10和20都放行了,再用display mac-address看看能不能学到终端的MAC。二层链路通了,再往下做MSTP和VRRP,排障范围会小很多。这里多做一步检查,能省下后面排障的好几个小时。

4. 华为设备配置全流程

4.1 交换机基础配置

先给4台交换机制建VLAN并配置接口。以SW1为例:

sysname SW1 vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/3 port link-type trunk port trunk allow-pass vlan 10 20

SW2的三条Trunk口配置完全类似,只是编号对应自己的接口。SW3和SW4除了两条上联Trunk之外,还要把连接PC的接口配成Access并划入对应VLAN。SW3连接PC1的接口:

interface GigabitEthernet0/0/3 port link-type access port default vlan 10

SW4连接PC2的接口划入VLAN 20。这里有个细节:接入交换机的两个上联口也要放行两个VLAN,不要只放行本机PC所在的VLAN。因为VRRP通告报文要从Vlanif10这个三层接口发出,而Vlanif10的底层是VLAN 10的广播域,如果Trunk没把VLAN 10放到SW2,SW2的VRRP Backup就收不到Master的通告,主备状态会一直处于不稳定状态。我见过有朋友为了“隔离”只放行单个VLAN,结果VRRP状态起不来,就是这个原因。

4.2 MSTP域与根桥配置

四台交换机都要进入MSTP域配置,内容必须完全一致。先在每台交换机上把STP模式改成MSTP:

stp mode mstp

然后配置MSTP域。以SW1为例:

stp region-configuration region-name LAB revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configuration

region-name可以随便起,但四台必须相同;revision-level默认是0,我习惯写成1,同样四台一致;instance 1 vlan 10的意思是把VLAN 10从默认的实例0迁移到实例1里。配置完不要忘记执行active region-configuration,这条命令才是真正让配置生效的动作,很多人就是漏了它,导致后来查看配置一切正常,但MSTP完全没有按实例工作。

四台全部配完后,在SW1上把实例1设为主根、实例2设为备根。root primary会把优先级调整到0,root secondary调整到4096,这样人为指定的根桥在MSTP选举中几乎不可能被其它默认优先级设备抢走:

stp instance 1 root primary stp instance 2 root secondary

在SW2上执行相反的配置:

stp instance 1 root secondary stp instance 2 root primary

SW3和SW4不配置根桥,保持默认优先级。配完后在SW1上执行display stp instance 1 brief,正常情况会看到SW1自己是根桥;在SW3上执行同样的命令,会看到一个上联口是Root角色,另一个上联口是Alternate角色(阻塞)。实例2的情况正好相反,SW3的上联口角色互换。看到这种现象,就说明MSTP的负载分担已经生效了。

4.3 VRRP网关冗余配置

接下来在核心交换机上配置三层接口和VRRP。SW1的配置如下:

interface Vlanif10 ip address 192.168.10.1 255.255.255.0 vrrp vrid 1 virtual-ip 192.168.10.254 vrrp vrid 1 priority 120 vrrp vrid 1 preempt-mode timer delay 20 interface Vlanif20 ip address 192.168.20.1 255.255.255.0 vrrp vrid 2 virtual-ip 192.168.20.254

SW2的配置如下:

interface Vlanif10 ip address 192.168.10.2 255.255.255.0 vrrp vrid 1 virtual-ip 192.168.10.254 interface Vlanif20 ip address 192.168.20.2 255.255.255.0 vrrp vrid 2 virtual-ip 192.168.20.254 vrrp vrid 2 priority 120 vrrp vrid 2 preempt-mode timer delay 20

解释一下这些参数:vrrp vrid用来标识VRRP组,VLAN 10和VLAN 20是两组独立的VRRP,VRID可以都叫1,也可以叫1和2,我习惯按VLAN号区分,好记好查;virtual-ip必须和PC上配置的网关一致,这是最关键的一行;priority 120让SW1在VRID 1里成为Master,SW2在VRID 2里成为Master;preempt-mode timer delay 20表示抢占开启但延时20秒,避免网络抖动时来回切换。

配置完执行display vrrp,正常情况下SW1上VRID 1状态是Master、VRID 2状态是Backup,SW2正好相反。有一点要说明:Backup接口上虽然配置了虚拟IP,但它不会响应ARP请求,只有Master才会把虚拟IP映射到自己的MAC。换句话说,终端网关的ARP条目里看到的MAC永远是Master设备的虚拟MAC,华为的虚拟MAC一般以00-00-5e-00-01开头,后面带VRID编号。看到这个MAC,就知道网关冗余已经工作了。

4.4 联调验证:从二层转发到三层切换

配置完成后,先用display stp region-configuration在每台设备上确认四台交换机的域配置一致,再在PC1上ping 192.168.10.254,PC2上ping 192.168.20.254,两个虚拟网关必须都能通。如果ping不通,先回头看二层链路和ARP,不要急着改VRRP参数。

接下来看路径是否正确。在SW3上分别执行:

display stp instance 1 brief display stp instance 2 brief

实例1的结果如果显示上联SW1的口是ROOT,上联SW2的口是ALT,就说明VLAN 10的二层流量确实走SW1方向;实例2则相反,说明VLAN 20走SW2方向。再回SW1执行display vrrp,确认VRID 1是Master,这样就能证明VLAN 10的三层网关也在SW1。二层和三层在同一台设备上,路径是最优的。

我当时做完这步,还试过在PC1上持续ping网关,然后循环执行display vrrp,看状态是否稳定。VRRP状态稳定这一步很重要,因为如果STP收敛有问题,VLAN 10的广播域会间歇性不稳定,VRRP通告也容易被影响,表现为Master频繁变化、ping时通时断。遇到这种情况,先解决STP的问题,再回头看VRRP。

4.5 故障切换模拟

综合实验里最过瘾的一步就是制造故障。我推荐做两个故障。

故障一:断掉SW3到SW1之间的链路。在SW1的GE0/0/1口执行shutdown,然后在SW3上重新观察实例1的端口角色:原来阻塞的Alternate口会在几秒内变成Root,VLAN 10的流量全部改走SW2方向。由于VLAN 10的网关Master仍在SW1,流量到SW2之后会通过核心间链路进入SW1的三层网关,所以业务不会中断,但这段期间路径确实绕了。如果你想做更彻底的故障模拟,可以把核心间链路也断开,此时MSTP重新收敛,VRRP的Master会切换到SW2,不过网络会短暂中断几秒。注意:做这类模拟前先保存好配置文件,结束后记得undo shutdown恢复端口。

故障二:SW1设备整体故障。我直接关掉SW1,PC1重新ping网关,会发现大约3秒左右VLAN 10的VRRP组被SW2接管,虚拟IP从SW2的Vlanif10上响应,PC1网关依然可通。这个场景最能说明VRRP的价值。做完记得把SW1重新启动,等VRRP和MSTP重新收敛后再看两台设备的状态是否回到预期。

5. 常见问题与排查实录

5.1 高频问题速查表

我把这个实验里各种常见问题整理成一个速查表,基本覆盖了eNSP和真机实验里会遇到的情况,排查的时候可以直接按图索骥:

问题现象可能原因排查命令与思路
VRRP两组都显示Master或都显示Backup两台设备之间VLAN没放行,通告无法互通;或其中一台没配虚拟IPdisplay port vlan检查Trunk放行;display vrrp对比两台设备状态
MSTP实例阻塞端口位置不对根桥没有固定在预期设备上,或域配置不一致display stp instance x brief查看根桥和端口角色;display stp region-configuration对比域参数
VLAN 10的流量绕路实例1主根和VRRP Master不在同一台设备对比display stp和display vrrp,按主备对齐原则调整
PC一直拿不到网关响应三层Vlanif没有配IP或虚拟IP没生效;PC网关填写错误在PC上查看 arp -a,看网关MAC是不是虚拟MAC
核心设备重启后VRRP频繁切换抢占默认开启,原Master恢复后又抢回来配置preempt-mode timer delay 20
display stp显示STP未使能eNSP部分设备默认关闭STP系统视图下执行stp enable
MSTP配置完了没反应没有执行active region-configuration重新进入region-configuration补一条active

5.2 几个值得记住的排查细节

排查VRRP问题时,我习惯先在PC上ping虚拟IP,如果通,再在核心交换机上查看Master状态;如果不通,先别急着怀疑VRRP,优先查二层连通性。二层不通,VRRP的通告和业务流量都走不了,三层状态再正常也是白搭。怎么快速判断二层?在接入交换机上执行display mac-address,看能不能学到PC的MAC以及两个VLAN对应的MAC表项是否正确。MAC表正常,说明广播域已经通了。

排查STP问题时,有一个特别有用的命令是display stp abnormal,它会直接列出异常端口。不过这个命令在eNSP的有些版本里不支持,所以更通用的做法还是display stp instance x brief看角色,再用display stp interface GigabitEthernet0/0/1查看端口详细状态。如果某个端口一直被阻塞而你希望它恢复,多半是优先级参数没有生效,回查根桥配置。

还有一个真机才会出现、模拟器里遇不到的问题别忽略了:交换机上的Trunk口如果不指定PVID,默认PVID是VLAN 1。如果上游交换机的接口PVID对应成了其它VLAN,二层标签行为就会异常。遇到排查不通的情况,顺手在两端对比一下display port vlan和PVID,很多时候问题就是这种基础配置造成的。

6. 个人实操经验与后续扩展方向

这类综合实验我在eNSP里做过很多遍,每次都有不同收获。我最开始做的时候,习惯把所有配置一股脑敲完再验证,结果STP、VRRP、链路状态混在一起,出了问题完全不知道从哪查起。后来我总结出一套顺序:先配VLAN和Trunk,再启用MSTP并验证端口角色,最后配VRRP。每一步验证通过再进入下一步,排障范围会非常清晰。用大白话说就是“先通二层,再通三层,最后做冗余联动”。

配置VRRP时还有一个小技巧值得分享:在命令行里给每个Vlanif配置完成后,可以紧接着用display this看看当前接口配置,确认命令没有因为敲错而没生效。模拟器里最常见的错误是敲命令时上下文不对,命令虽然进去了,但落在错误的接口或错误的视图里。养成display vrrp、display stp、display current-configuration三步检查的好习惯,比遇到问题翻文档有用得多。

这个实验的扩展空间也很大。比如给核心交换机的上行口配上Eth-Trunk,把两条物理链路捆绑成一个逻辑链路,STP上看成一个端口,配置和维护都简化了;再比如用BFD联动VRRP,让Master在检测到上行链路故障时自动降低优先级,实现更快的三级联动切换。也可以在接入层把交换机和核心之间的链路配置成监视链路,让接入交换机跟随核心状态自动调整。把这些扩展点一一试过之后,你对园区网高可用设计的感觉会完全不一样。

最后说说我个人在故障切换体会最深的一点:VRRP的切换并不等于业务无感知,终端侧还要等待ARP重新解析新的网关,切换期间会出现几秒钟的丢包。所以不要以为在交换机上看到VRRP状态秒切就万事大吉,真正验收实验时,一定要在PC上持续ping,全程观察丢包时间和恢复时间。能做到这个颗粒度的实验复盘,才算真正做完了VRRP+MSTP的综合实验。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进