华为交换机 MSTP 多实例生成树:根桥与负载分担配置 - 夜莺博客

华为交换机 MSTP 多实例生成树:根桥与负载分担配置

在双上行组网的接入层,如果只跑一棵生成树,总会有一条链路被阻塞,一半的带宽被白白浪费。华为交换机的 MSTP(多生成树协议)通过多实例解决了这个问题:把不同的 VLAN 映射到不同的实例,让每个实例各自选根桥,同一个物理端口在实例 1 里转发、在实例 2 里阻塞,从而实现流量的负载分担。本文给出从创建 MST 域到手动指定根桥、备份根桥,再到验证收敛结果的完整配置流程,并说明最常见的配置失误。

MSTP 的三个层次:域、实例、VLAN 映射

MSTP 把网络划分成若干 MST 域(MST Region)。同一域内的所有设备必须拥有相同的域名称、相同的 VLAN 到实例映射表、相同的修订级别,否则它们会被视为属于不同的域,生成树行为就和预期完全不同。这是 MSTP 排障里最高频的问题根源。

每个域内可以创建多个实例(MSTI),实例之间互相独立。每个实例单独选举根桥,也就意味着你可以让实例 1 的流量走主链路、实例 2 的流量走备用链路——这是 MSTP 相比 RSTP 的核心价值。

第一步:在所有交换机上创建 MST 域

关键点是:四台交换机的域配置必须完全一致。域名称、实例与 VLAN 的映射、active region-configuration 缺一不可。

<HUAWEI> system-view
[HUAWEI] sysname SwitchA
[SwitchA] stp region-configuration
[SwitchA-mst-region] region-name RG1
[SwitchA-mst-region] instance 1 vlan 2 to 10
[SwitchA-mst-region] instance 2 vlan 11 to 20
[SwitchA-mst-region] active region-configuration
[SwitchA-mst-region] quit

在 SwitchB、SwitchC、SwitchD 上执行同样的操作,域名称同为 RG1、映射表完全一致。修改映射表之后必须重新执行 active region-configuration 使其生效,否则配置停留在缓冲区里不会下发。

第二步:手动指定根桥与备份根桥

华为建议在 MSTP 环境中手动指定根桥,不要让设备自动选举——自动选举会导致根桥位置随 MAC 地址变化而漂移,收敛结果不可预期。

在一棵生成树中只能有一个生效的根桥。当多台设备被指定为同一实例的根桥时,系统会选择 MAC 地址最小的那台。备份根桥可以配置多个,根桥故障后 MAC 地址最小的备份根桥接管;但如果此时另外配置了新的根桥,备份根桥不会抢占。

负载分担的设计思路

实现负载分担:让 SwitchA 做实例 1 的根桥、实例 2 的备份根桥,SwitchB 反过来。

# --- SwitchA ---
[SwitchA] stp instance 1 root primary
[SwitchA] stp instance 2 root secondary

# --- SwitchB ---
[SwitchB] stp instance 1 root secondary
[SwitchB] stp instance 2 root primary

执行 root primary 后设备优先级自动变为 0,执行 root secondary 后自动变为 4096,这两种情况下优先级不能再手工修改。如果不指定 instance,则作用于实例 0。

第三步:调整路径开销,控制阻塞端口位置

多实例负载分担能否按预期工作,取决于哪个端口被阻塞。两台汇聚设备上各有一条链路的路径开销需要被抬高,使它在对应实例中成为阻塞端口。华为的计算方法需要显式指定,否则跨厂商组网时开销值不一致。

# --- SwitchC:让 GE1/0/2 在实例 2 中成为阻塞端口 ---
[SwitchC] stp pathcost-standard legacy
[SwitchC] interface gigabitethernet 1/0/2
[SwitchC-GigabitEthernet1/0/2] stp instance 2 cost 20000
[SwitchC-GigabitEthernet1/0/2] quit

# --- SwitchD:让 GE1/0/2 在实例 1 中成为阻塞端口 ---
[SwitchD] stp pathcost-standard legacy
[SwitchD] interface gigabitethernet 1/0/2
[SwitchD-GigabitEthernet1/0/2] stp instance 1 cost 20000
[SwitchD-GigabitEthernet1/0/2] quit

第四步:开启保护功能

根桥被外部设备抢走是接入层常见事故,根保护可以彻底避免。在根桥设备的指定端口(朝向下游的端口)上启动根保护:

[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

面向终端的接入端口还应该开启边缘端口和 BPDU 保护,防止用户私接交换机造成环路:

[SwitchC] stp bpdu-protection
[SwitchC] interface gigabitethernet 1/0/1
[SwitchC-GigabitEthernet1/0/1] stp edged-port enable
[SwitchC-GigabitEthernet1/0/1] quit

验证配置结果

display stp region-configuration
display stp brief
display stp instance 1 brief
display stp instance 2 brief
display stp root
display stp interface gigabitethernet 1/0/1

确认阻塞端口是否符合设计

display stp brief 的输出时,重点确认三件事:实例 1 和实例 2 的根桥分别是谁,两台汇聚设备的端口角色是否符合设计(一个 ROOT 一个 ALTERNATE),以及阻塞端口是否位于预期的链路上。如果两个实例的根桥相同,说明映射表或根桥配置没有生效,先检查域配置是否一致。

常见配置失误

  • 域不一致:域名称、VLAN 映射、修订级别三者任一不同,设备就属于不同域,多实例负载分担形同虚设。用 display stp region-configuration 逐台核对。
  • 忘记激活:改了映射表没执行 active region-configuration,配置不会生效。
  • 根保护配在错方向:根保护要配在根桥朝向下游的端口上,配在朝向上游的端口会导致端口被阻塞。
  • 路径开销标准不统一:跨厂商组网时统一使用 stp pathcost-standard legacy,否则同一链路两端算出的开销不同,阻塞端口位置会出乎意料。

相关阅读:我们的 华为交换机 VLAN Access/Trunk/Hybrid 配置教程华为交换机 Eth-Trunk 链路聚合配置 以及 生成树根桥选举与优先级设计

原文链接:https://support.huawei.com/enterprise/zh/doc/EDOC1100365112/bb2dbbbe