目录

简介

开始使用前

规则

先决条件

使用的组件

中继之间 VLAN 负载均衡的简介

STP 如何决定阻塞哪个端口

在运行 CatOS 的 Catalyst 交换机上配置 VLAN 负载均衡

有关 portvlanpri 命令的详细信息

在运行集成 IOS 的 Catalyst 交换机上配置 VLAN 负载均衡

有关 port-priority 和 vlan port-priority 命令的详细信息

结论

相关信息

简介

本文档提供有关中继之间 VLAN 负载均衡的理论，并且为运行 CatOS 和集成 IOS 的交换机提供配置示例。

开始使用前

规则

有关文档规则的详细信息，请参阅 Cisco 技术提示规则。

先决条件

本文档没有任何特定的前提条件。

使用的组件

本文档不限于特定的软件和硬件版本。

中继之间 VLAN 负载均衡的简介

在本文档中使用的命令可在 CatOS 和集成 IOS 的 Catalyst 4000、5000 及 6000 系列上使用。本文档的理论部分与生产树协议 (STP) 有关并且是独立于平台的。

在下面的图 1 显示的配置中，两台交换机通过多个中继直接连接，这对于冗余非常常见。如果两条链路之一失败，则第二条将很快可用于传输流量。当两条链路均在运行时，生成树算法 (STA) 禁用其中一条，以避免两台交换机之间的桥接环路。

在上面的图 1 配置中，两个 Fastethernet 中继连接 Catalyst R 和 Catalyst D，STP 为配置的所有 VLAN 选择同一个阻塞端口。在这种情况下，Catalyst R是根网桥，Catalyst D决定阻塞VLAN 1和VLAN 2的端口D2。此设计的主要问题是链路R2-D2只是被牺牲，两台交换机之间只有100 Mb/s的可用带宽。要利用两条链路，您可以更改配置并允许 VLAN 1 仅在链路 R1-D1 上，而 VLAN 2 仅在链路 R2-D2 上。

如图 2 所示，产生的网络已丢失其冗余。现在，您有两条链路同时转发，并且您在两台交换机之间实际可使用 200 Mb/s。但是，如果一条链路失败，则您将完全失去一个 VLAN 的连通性。理想的解决方案是图 3 中描述的解决方案：

在图 3 中，您保持两台交换机之间的中继，但是端口 D1 阻塞 VLAN 1 并转发 VLAN 2；端口D2阻塞了VLAN 2并转发VLAN 1。此设计保留了图1和图2的最佳功能：

- 两条链路均转发，在两台交换机之间提供 200 Mb/s 的聚合连通性。

- 如果一条链路失败，则剩余的一条取消阻塞相应的 VLAN 并且保持交换机之间两个 VLAN 的连通性。

本文档解释如何在 STP 操作的简短的说明以后达到这种配置。

STP 如何决定阻塞哪个端口

STA 工作方式的详细说明不在本文档的范围之内。但是，它简要地总结这种情况下算法如何决定端口是阻塞或转发。它着重于可能只有一个 VLAN 的最简单配置；Catalyst R是此VLAN中的根网桥，Catalyst D有多个冗余连接到Catalyst R。Catalyst D阻止其所有端口到Catalyst R，但阻止其根端口。Catalyst D 如何选择其根端口？网桥在链路之间运行 STA 交换网桥协议数据单元 (BPDU)，并且 BPDU 可以根据他们的内容严格分类。如果有以下各项，则 BPDU 更优：

1. 较小的根网桥 ID。

2. 较低的根路径成本。

3. 较小的发送网桥 ID。

4. 较小的发送端口 ID

按顺序检查这 4 个参数，即，如果在您比较的两个 BPDU 中参数 1 是相同的，则您只关注参数 2。Catalyst D 上选择为根端口的端口是接收最佳 BPDU 的端口。

在图 4 的特殊情况下，Catalyst R 发送的所有 BPDU 有同样的根网桥 ID、相同的根路径成本和相同的发送网桥 ID。留下来选择最佳端口的唯一参数是发送端口 ID。发送端口 ID 是一个 16 位参数，分为两个字段：端口优先级和端口索引。端口优先级的默认值是 32，并且交换机上每个端口的端口索引是唯一的。

端口优先级

端口索引

大小，以位为单位

6

10

默认值

32

固定的唯一值

图 4 代表 BPDU 中的端口 ID 参数。在这种情况下，Catalyst D选择端口D1作为其根端口，因为端口索引R2低于R1。如果希望D2最终转发，则需要强制它作为根端口。要执行此操作的唯一方法是降低 R2 端口优先级值（或增加 R1 端口优先级值）。 这是图 5 中进行的操作。

为了在两个中继之间实现负载均衡，请您根据 VLAN 调整 Catalyst R 的端口优先级。

在运行 CatOS 的 Catalyst 交换机上配置 VLAN 负载均衡

实验图

显示 Catalyst R 的当前 STP 状态

这是 Catalyst R 的当前 STP 状态。它是 VLAN 1 和 2 的根，因此其所有端口均进行转发。

Catalyst_R> (enable) show spantree 3/1

Port                     Vlan Port-State    Cost  Priority Portfast   Channel_id

------------------------ ---- ------------- ----- -------- ---------- ----------

3/1                     1    forwarding       19       32 disabled   0

3/1                     2    forwarding       19       32 disabled   0

Catalyst_R> (enable) show spantree 3/2

Port                     Vlan Port-State    Cost  Priority Portfast   Channel_id

------------------------ ---- ------------- ----- -------- ---------- ----------

3/2                     1    forwarding       19       32 disabled   0

3/2                     2    forwarding       19       32 disabled   0

Catalyst_R> (enable)

显示 Catalyst D 的当前 STP 状态

正如预期，Catalyst D 上 VLAN 1 和 2 的端口 5/2 均阻塞。

Catalyst_D> (enable) show spantree 5/1

Port      Vlan  Port-State     Cost   Priority  Fast-Start  Group-Method

--------- ----  -------------  -----  --------  ----------  ------------

5/1      1     forwarding        19        32   disabled

5/1      2     forwarding        19        32   disabled

Catalyst_D> (enable) show spantree 5/2

Port      Vlan  Port-State     Cost   Priority  Fast-Start  Group-Method

--------- ----  -------------  -----  --------  ----------  ------------

5/2      1     blocking          19        32   disabled

5/2      2     blocking          19        32   disabled

Catalyst_D> (enable)

调整 Catalyst R 的端口优先级

您将降低端口3/2上VLAN 1的端口优先级值。这样，Catalyst D上对应的端口5/2接收的BPDU比端口5/1上发送的BPDU（端口优先级值仍为32）要好。

Catalyst_R> (enable) set spantree portvlanpri 3/2 16 1

Port 3/2 vlans 1 using portpri 16.

Port 3/2 vlans 2-1004 using portpri 32.

Port 3/2 vlans 1005 using portpri 4.

Catalyst_R> (enable)

检查 Catalyst R 上的结果

您可以检查到 VLAN 1 的端口优先级值已更改：

Catalyst_R> (enable) show spantree 3/1

Port                     Vlan Port-State    Cost  Priority Portfast   Channel_id

------------------------ ---- ------------- ----- -------- ---------- ----------

3/1                     1    forwarding       19       32 disabled   0

3/1                     2    forwarding       19       32 disabled   0

Catalyst_R> (enable) show spantree 3/2

Port                     Vlan Port-State    Cost  Priority Portfast   Channel_id

------------------------ ---- ------------- ----- -------- ---------- ----------

3/2                     1    forwarding       19       16 disabled   0

3/2                     2    forwarding       19       32 disabled   0

Catalyst_R> (enable)

检查 Catalyst D 上的结果

对于 VLAN 1，您可以看到 Catalyst D 上端口 5/1 当前阻塞，而端口 5/2 在进行转发，如预期一样。

Catalyst_D> (enable) show spantree 5/1

Port      Vlan  Port-State     Cost   Priority  Fast-Start  Group-Method

--------- ----  -------------  -----  --------  ----------  ------------

5/1      1     blocking          19        32   disabled

5/1      2     forwarding        19        32   disabled

Catalyst_D> (enable) show spantree 5/2

Port      Vlan  Port-State     Cost   Priority  Fast-Start  Group-Method

--------- ----  -------------  -----  --------  ----------  ------------

5/2      1     forwarding        19        32   disabled

5/2      2     blocking          19        32   disabled

Catalyst_D> (enable)

有关 portvlanpri 命令的详细信息

每个中继的端口 VLAN 优先级只有两个可能的值，并且只有其中一个可使用 portvlanpri 命令进行配置。这意味着对于特定中继，您有两组 VLAN：

- 一组具有“全局”端口优先级值（默认情况下为 32）。

- 一组使用 portvlanpri 命令输入“自定义”值。

下面的示例可对此进行解释。在此示例中，考虑添加第三个 VLAN。默认情况下，此 VLAN 属于有全局端口优先级值（默认值 32）的组。

Catalyst_R> (enable) set vlan 3

Vlan 3 configuration successful

Catalyst_R> (enable) show spantree 3/2

Port                     Vlan Port-State    Cost  Priority Portfast   Channel_id

------------------------ ---- ------------- ----- -------- ---------- ----------

3/2                     1    forwarding       19       16 disabled   0

3/2                     2    forwarding       19       32 disabled   0

3/2                     3    forwarding       19       32 disabled   0

Catalyst_R> (enable)

使用 set spantree portpri 命令更改端口的全局优先级：

Catalyst_R> (enable) set spantree portpri 3/2 48

Bridge port  3/2 port priority set to 48.

Catalyst_R> (enable) show spantree 3/2

Port                     Vlan Port-State    Cost  Priority Portfast   Channel_id

------------------------ ---- ------------- ----- -------- ---------- ----------

3/2                     1    forwarding       19       16 disabled   0

3/2                     2    forwarding       19       48 disabled   0

3/2                     3    forwarding       19       48 disabled   0

Catalyst_R> (enable)

请注意，属于“全局”组的所有VLAN都将其优先级更改为48。现在将VLAN 3分配给另一个“自定义”VLAN组，并使用portvlanpri命令将其值指定为8:

Catalyst_R> (enable) set spantree portvlanpri 3/2 8 3

Port 3/2 vlans 1,3 using portpri 8.

Port 3/2 vlans 2,4-1004 using portpri 48.

Port 3/2 vlans 1005 using portpri 4.

Catalyst_R> (enable) show spantree 3/2

Port                     Vlan Port-State    Cost  Priority Portfast   Channel_id

------------------------ ---- ------------- ----- -------- ---------- ----------

3/2                     1    forwarding       19        8 disabled   0

3/2                     2    forwarding       19       48 disabled   0

3/2                     3    forwarding       19        8 disabled   0

Catalyst_R> (enable)

请注意，“自定义”组中的所有VLAN已将其优先级更改为8，而不仅是VLAN 3。要将VLAN 3重新置于默认组中，请使用clear spantree portvlanpri命令：

Catalyst_R> (enable) clear spantree portvlanpri 3/2 3

Port 3/2 vlans 1 using portpri 8.

Port 3/2 vlans 2-1004 using portpri 48.

Port 3/2 vlans 1005 using portpri 4.

Catalyst_R> (enable) show spantree 3/2

Port                     Vlan Port-State    Cost  Priority Portfast   Channel_id

------------------------ ---- ------------- ----- -------- ---------- ----------

3/2                     1    forwarding       19        8 disabled   0

3/2                     2    forwarding       19       48 disabled   0

3/2                     3    forwarding       19       48 disabled   0

Catalyst_R> (enable)

对此命令有一项最后的限制条件。分配给“全局”组的值必须高于“自定义”组配置的值。

Catalyst_R> (enable) set spantree portvlanpri 3/2 62 3

Portvlanpri must be less than portpri. Portpri for 3/2 is 48.

综述：

“全局”组

“自定义”组

默认情况下，所有 VLAN 均属于此组。

用 set spantree portvlanpri 命令选择的 VLAN 属于此组。

使用 set spantree port priority 命令设置这些 VLAN 的优先级。

通过 set spantree portvlanpri 命令设置所有这些 VLAN 的优先级值。

为“全局”组配置的优先级值一定高于为“自定义”组配置的值。

clear spantree portvlanpri 允许您将 VLAN 从此组放回到另一组。

在运行集成 IOS 的 Catalyst 交换机上配置 VLAN 负载均衡

注意：此配置示例适用于运行IOS的交换机 — Catalyst 2900/3500XL、Catalyst 2950、Catalyst 3550、Catalyst 4000 supervisor III/IV和Catalyst 600。

实验图

显示 Catalyst R 的当前 STP 状态

这是 Catalyst R 的当前 STP 状态。它是 VLAN 1 和 2 的根，因此其所有端口均进行转发。

Catalyst_R#show spanning-tree interface FastEthernet 3/1

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Desg FWD 19        128.129  P2p

VLAN0002         Desg FWD 19        128.129  P2p

Catalyst_R#show spanning-tree interface FastEthernet 3/2

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Desg FWD 19        128.130  P2p

VLAN0002         Desg FWD 19        128.130  P2p

显示 Catalyst D 的当前 STP 状态

正如预期，Catalyst D 上 VLAN 1 和 2 的端口 5/2 均阻塞。

Catalyst_D#show spanning-tree interface FastEthernet 5/1

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Root FWD 19        128.129  P2p

VLAN0002         Root FWD 19        128.129  P2p

Catalyst_D#show spanning-tree interface FastEthernet 5/2

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Altn BLK 19        128.130  P2p

VLAN0002         Altn BLK 19        128.130  P2p

调整 Catalyst R 的端口优先级

您将降低端口3/2上VLAN 1的端口优先级值。这样，Catalyst D上对应的端口5/2接收的BPDU比端口5/1上发送的BPDU（端口优先级值仍为128）要好。

Catalyst_R#config terminal

Catalyst_R(config)#interface FastEthernet 3/2

Catalyst_R(config-if)#spanning-tree vlan 1 port-priority 64

Catalyst_R(config-if)#end

Catalyst_R#

检查 Catalyst R 上的结果

您可以检查到 VLAN 1 的端口优先级值已更改：

Catalyst_R#show spanning-tree interface FastEthernet 3/1

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Desg FWD 19        128.129  P2p

VLAN0002         Desg FWD 19        128.129  P2p

Catalyst_R#show spanning-tree interface FastEthernet 3/2

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Desg FWD 19         64.130  P2p

VLAN0002         Desg FWD 19        128.130  P2p

检查 Catalyst D 上的结果

对于 VLAN 1，您可以看到 Catalyst D 上端口 5/1 当前阻塞，而端口 5/2 在进行转发，如预期一样。

Catalyst_D#show spanning-tree interface FastEthernet 5/1

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Altn BLK 19        128.129  P2p

VLAN0002         Root FWD 19        128.129  P2p

Catalyst_D#show spanning-tree interface FastEthernet 5/2

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Root FWD 19        128.130  P2p

VLAN0002         Altn BLK 19        128.130  P2p

有关 port-priority 和 vlan port-priority 命令的详细信息

有两种定义 VLAN 端口优先级的方法：

- 可通过 port-priority 命令按接口对其进行修改的“全局”端口优先级值（默认情况下为 128）

- 可使用 VLAN port-priority 命令按接口或按 VLAN 对其进行修改的“每个 VLAN”的端口优先级值

下面的示例可对此进行解释。在此示例中，考虑添加第三个 VLAN。默认情况下，此 VLAN 属于有全局端口优先级值（默认值 128）的组。

Catalyst_R#show spanning-tree interface FastEthernet 3/2

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Desg FWD 19         64.130  P2p

VLAN0002         Desg FWD 19        128.130  P2p

VLAN0003         Desg FWD 19        128.130  P2p

使用 spanning-tree port-priority interface configuration 命令更改端口的全局优先级：

Catalyst_R(config)#interface FastEthernet 3/2

Catalyst_R(config-if)#spanning-tree port-priority 160

Catalyst_R#

Catalyst_R#show spanning-tree interface FastEthernet 3/2

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Desg FWD 19         64.130  P2p

VLAN0002         Desg FWD 19        160.130  P2p

VLAN0003         Desg FWD 19        160.130  P2p

请注意，属于“全局”组的所有VLAN都将其优先级更改为160。现在，使用spanning-tree vlan port-priority interface命令将VLAN 3的优先级分配为48:

Catalyst_R(config)#interface FastEthernet 3/2

Catalyst_R(config-if)#spanning-tree vlan 3 port-priority 48

Catalyst_R#

Catalyst_R#show spanning-tree interface FastEthernet 3/2

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Desg FWD 19         64.130  P2p

VLAN0002         Desg FWD 19        160.130  P2p

VLAN0003         Desg FWD 19         48.130  P2p

请注意，只有VLAN 3已将其优先级更改为48。要将VLAN 3重新置于默认组中，请使用no spanning-tree vlan port-priority interface命令：

Catalyst_R(config)#interface FastEthernet 3/2

Catalyst_R(config-if)#no spanning-tree vlan 3 port-priority

Catalyst_R#

Catalyst_R#show spanning-tree interface FastEthernet 3/2

Vlan             Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- --------------------------------

VLAN0001         Desg FWD 19         64.130  P2p

VLAN0002         Desg FWD 19        160.130  P2p

VLAN0003         Desg FWD 19        160.130  P2p

结论

刚完成的 VLAN 负载均衡配置优化两个 Catalyst 之间冗余中继的使用。

保持默认的 STP 值导致两个 Catalyst 之间的所有冗余链路进入阻塞模式。调整 STP 优先级允许同时对不同的 VLAN 使用多条链路。这增加了两个设备之间可用的整体带宽。在一条链路失败的情况下，STP 在其重新收敛时重新将 VLAN 发送到剩余的中继。

此设计留下的唯一缺点是只能根据 VLAN 来平衡流量负载。如果在前一个示例中，您有 130 Mb/s 的流量流经 VLAN 1，而 VLAN 2 只有 10 Mb/s 的流量，则您在 VLAN1 上仍会丢弃数据包，即使在理论上，您在 Catalyst R 和 Catalyst D 之间有 200 Mb/s 的流量。EtherChanneling 功能通过根据数据包提供多条链路之间的负载均衡解决此问题。如果您的硬件支持，则使用 FastEtherchannel（或 GigabitEtherChannel）而不是本文档中描述的配置。

相关信息

- 生成树协议支持页

- 交换机产品支持

- LAN 交换技术支持

- 技术支持和文档 - Cisco Systems