备用核心只有主机坏了才上场?华为MSTP配VRRP双组互备两台都干活
双核心组网里最常见的做法,是两台三层交换机配 VRRP 主备备份——主机干活,备机干等。设备钱花了两份,转发能力却只用一半;更要紧的是,接入交换机双上行到两台核心,二层天然成环,还得再叠一层生成树破环。很多网络就是这么拼出来的:MSTP 一套配置、VRRP 一套配置,各管各的,结果生成树阻塞的端口方向跟 VRRP 主备方向对不上,流量在二层绕远路,出了问题还不好查。
病根在于两套协议没有对表。生成树决定的是二层链路哪条通哪条断,VRRP 决定的是网关角色谁主谁备,这两件事如果各定各的,就可能出现"网关在东、链路走西"的拧巴局面:报文先穿过一台核心再折回来上网关,路径多绕一跳,故障切换时行为也难预测。设备越多、VLAN 越多,这种隐性错位越难排查,表现往往只是"网速莫名慢、偶尔丢包",抓包都不容易定位。
华为官方有一套 MSTP 与 VRRP 组合的组网示例,思路是把两个协议按同一套主备方向"对齐":MSTP 建两个实例,VRRP 建两个备份组,交叉指定主备——VLAN 2 的流量走 SwitchA,VLAN 3 的流量走 SwitchB,两台核心同时转发、互为备份。一条上行链路断了,流量切到另一条;一台核心坏了,另一个备份组自动接管,二层三层方向始终一致。
组网与规划
主机通过 SwitchC 接入,SwitchC 双上行连接 SwitchA 和 SwitchB。HostA 划在 VLAN 2、HostB 划在 VLAN 3,两个 VLAN 各自独立成一棵生成树实例、各建一个 VRRP 备份组,一台核心坏了另一个备份组自动顶上,一条上行断了另一条接住流量,两层方向始终拧成一股绳。地址规划:SwitchA 的 VLANIF2 为 10.1.2.102/24、VLANIF3 为 10.1.3.102/24、VLANIF4 为 10.1.4.102/24;SwitchB 的 VLANIF2 为 10.1.2.103/24、VLANIF3 为 10.1.3.103/24、VLANIF5 为 10.1.5.103/24。两台核心与路由器之间跑 OSPF。
MSTP 侧配置
先把三台交换机划进同一个 MST 域,VLAN 2 映射实例 1、VLAN 3 映射实例 2。以 SwitchA 为例,SwitchB、SwitchC 除设备名外配置相同:
<HUAWEI> system-view
[HUAWEI] sysname SwitchA
[SwitchA] stp region-configuration //进入MST域视图。
[SwitchA-mst-region] region-name RG1 //配置域名为RG1。
[SwitchA-mst-region] instance 1 vlan 2 //将VLAN 2映射到实例1上。
[SwitchA-mst-region] instance 2 vlan 3 //将VLAN 3映射到实例2上。
[SwitchA-mst-region] active region-configuration //激活MST域的配置。
[SwitchA-mst-region] quit
再交叉指定两个实例的根桥——这一步就是"对齐"的关键,实例 1 的主根在 SwitchA,实例 2 的主根在 SwitchB:
[SwitchA] stp instance 1 root primary
[SwitchB] stp instance 1 root secondary
[SwitchB] stp instance 2 root primary
[SwitchA] stp instance 2 root secondary
路径开销统一用华为计算方法,并在 SwitchC 上把要被阻塞的端口开销加大到 20000,让阻塞位置落在接入侧双上行中的一条上:
[SwitchC] stp pathcost-standard legacy
[SwitchC] interface gigabitethernet 1/0/1
[SwitchC-GigabitEthernet1/0/1] stp instance 2 cost 20000
[SwitchC-GigabitEthernet1/0/1] quit
[SwitchC] interface gigabitethernet 1/0/4
[SwitchC-GigabitEthernet1/0/4] stp instance 1 cost 20000
[SwitchC-GigabitEthernet1/0/4] quit
SwitchA、SwitchB 上同样执行 stp pathcost-standard legacy。随后三台设备分别全局使能 MSTP(stp enable),与主机、路由器相连的端口配置为边缘端口并按需开启 BPDU 保护:
[SwitchC] interface gigabitethernet 1/0/2
[SwitchC-GigabitEthernet1/0/2] stp edged-port enable
[SwitchC-GigabitEthernet1/0/2] quit
[SwitchC] interface gigabitethernet 1/0/3
[SwitchC-GigabitEthernet1/0/3] stp edged-port enable
[SwitchC-GigabitEthernet1/0/3] quit
[SwitchC] stp bpdu-protection
在两台核心的指定端口上配根保护,防止下级交换机抢根桥:
[SwitchA] interface gigabitethernet 1/0/1
[SwitchA-GigabitEthernet1/0/1] stp root-protection
[SwitchA-GigabitEthernet1/0/1] quit
[SwitchB] interface gigabitethernet 1/0/1
[SwitchB-GigabitEthernet1/0/1] stp root-protection
[SwitchB-GigabitEthernet1/0/1] quit
二层部分收尾:三台设备 vlan batch 2 to 3,环路上的互联口配 trunk 放行 VLAN 2 to 3,接主机的口配 access。以 SwitchA 上行口和 SwitchC 接主机口为例:
[SwitchA] interface gigabitethernet 1/0/1
[SwitchA-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-GigabitEthernet1/0/1] port trunk allow-pass vlan 2 to 3
[SwitchA-GigabitEthernet1/0/1] quit
[SwitchC] interface gigabitethernet 1/0/2
[SwitchC-GigabitEthernet1/0/2] port link-type access
[SwitchC-GigabitEthernet1/0/2] port default vlan 2
[SwitchC-GigabitEthernet1/0/2] quit
VRRP 侧配置
网络层先给各 VLANIF 配地址并与路由器跑通 OSPF,以 SwitchA 为例:
[SwitchA] vlan batch 4
[SwitchA] interface gigabitethernet 1/0/3
[SwitchA-GigabitEthernet1/0/3] port link-type trunk
[SwitchA-GigabitEthernet1/0/3] port trunk allow-pass vlan 4
[SwitchA-GigabitEthernet1/0/3] quit
[SwitchA] interface vlanif 2
[SwitchA-Vlanif2] ip address 10.1.2.102 24
[SwitchA-Vlanif2] quit
[SwitchA] interface vlanif 3
[SwitchA-Vlanif3] ip address 10.1.3.102 24
[SwitchA-Vlanif3] quit
[SwitchA] interface vlanif 4
[SwitchA-Vlanif4] ip address 10.1.4.102 24
[SwitchA-Vlanif4] quit
[SwitchA] ospf 1
[SwitchA-ospf-1] area 0
[SwitchA-ospf-1-area-0.0.0.0] network 10.1.2.0 0.0.0.255
[SwitchA-ospf-1-area-0.0.0.0] network 10.1.3.0 0.0.0.255
[SwitchA-ospf-1-area-0.0.0.0] network 10.1.4.0 0.0.0.255
[SwitchA-ospf-1-area-0.0.0.0] quit
[SwitchA-ospf-1] quit
然后建两个 VRRP 备份组,方向与 MSTP 实例严格对应——备份组 1 的主设备必须是实例 1 的根桥 SwitchA,备份组 2 的主设备必须是实例 2 的根桥 SwitchB,这样阻塞口、根桥、网关三者指向同一家,HostA 的流量从通的哪条上行直达自己的网关,一步不绕。备份组 1 服务 VLAN 2,SwitchA 优先级 120 做主:
[SwitchA] interface vlanif 2
[SwitchA-Vlanif2] vrrp vrid 1 virtual-ip 10.1.2.100 //创建组号为1的VRRP备份组并为备份组指定虚拟IP地址10.1.2.100。
[SwitchA-Vlanif2] vrrp vrid 1 priority 120 //配置VRRP备份组1的优先级为120。
[SwitchA-Vlanif2] vrrp vrid 1 preempt-mode timer delay 20 //配置VRRP备份组1抢占延时为20秒。
[SwitchA-Vlanif2] quit
[SwitchB] interface vlanif 2
[SwitchB-Vlanif2] vrrp vrid 1 virtual-ip 10.1.2.100 //创建组号为1的VRRP备份组并为备份组指定虚拟IP地址10.1.2.100。
[SwitchB-Vlanif2] quit
备份组 2 服务 VLAN 3,换成 SwitchB 做主:
[SwitchB] interface vlanif 3
[SwitchB-Vlanif3] vrrp vrid 2 virtual-ip 10.1.3.100 //创建组号为2的VRRP备份组并为备份组指定虚拟IP地址10.1.3.100。
[SwitchB-Vlanif3] vrrp vrid 2 priority 120 //配置VRRP备份组2的优先级为120。
[SwitchB-Vlanif3] vrrp vrid 2 preempt-mode timer delay 20 //配置VRRP备份组2抢占延时为20秒。
[SwitchB-Vlanif3] quit
[SwitchA] interface vlanif 3
[SwitchA-Vlanif3] vrrp vrid 2 virtual-ip 10.1.3.100 //创建组号为2的VRRP备份组并为备份组指定虚拟IP地址10.1.3.100。
[SwitchA-Vlanif3] quit
最后把主机的默认网关指向对应虚拟地址:HostA 填 10.1.2.100,HostB 填 10.1.3.100。
验证
网络计算稳定后,先看二层。在 SwitchC 上执行 display stp interface brief,两个上行口应当一个实例转发、另一个实例阻塞,方向正好相反:
[SwitchC] display stp interface gigabitethernet 1/0/1 brief
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ROOT FORWARDING NONE
1 GigabitEthernet1/0/1 ROOT FORWARDING NONE
2 GigabitEthernet1/0/1 ALTE DISCARDING NONE
[SwitchC] display stp interface gigabitethernet 1/0/4 brief
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/4 ALTE DISCARDING NONE
1 GigabitEthernet1/0/4 ALTE DISCARDING NONE
2 GigabitEthernet1/0/4 ROOT FORWARDING NONE
再看三层。SwitchA 上执行 display vrrp,应当看到它在备份组 1 里 State 为 Master、备份组 2 里 State 为 Backup——两台核心各管一组,互为备份,任何一台故障两组虚拟网关都会由另一台接管。SwitchB 上执行同一条命令,结果正好相反:备份组 1 里 Backup、备份组 2 里 Master。
动态演练可以做得更踏实:把 SwitchA 断电,HostA 的网关备份组 1 会因 Master 失联而重新选举,SwitchB 接管虚拟 IP 10.1.2.100,同时实例 1 里原本阻塞的上行口放开转发,HostA 的流量整体改走 SwitchB 侧;HostB 的业务本来就在 SwitchB 上,全程无感。SwitchA 修复回网后,优先级 120 配合 20 秒抢占延时让它有序拿回备份组 1 的 Master 角色,而不是来回抖动。两组备份组、两棵实例树交叉主备,这正是这套组合的价值:平时两台都干活,故障时另一台全接得住。
双核心改造最容易翻车的就是二层阻塞方向与三层网关方向不一致,流量绕路、时通时断。贵州诚鑫致达科技做核心层改造方案时,会先定好 VLAN 到实例到备份组的对应表再下发配置。正在规划双核心的读者,欢迎留言说说你的 VLAN 规模。