局域网交换 : 生成树协议

使用生成树协议端口优先级在中继之间进行 VLAN 负载均衡

2016 年 10 月 24 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 10 月 20 日) | 反馈


目录


简介

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

开始使用前

规则

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

先决条件

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

使用的组件

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

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

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

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

/image/gif/paws/10555/15a.gif

在上面的图 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 上。

/image/gif/paws/10555/15b.gif

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

/image/gif/paws/10555/15c.gif

在图 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 的端口。

15d.gif

在图 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 中进行的操作。

/image/gif/paws/10555/15e.gif

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

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

实验图

/image/gif/paws/10555/15f.gif

显示 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 接收比在端口 5/1(端口优先级值仍为 32)发送的 BPDU 更好的 BPDU。

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。现在,使用 portvlanpri 命令将值更改为 8,将 VLAN 3 分配到 VLAN 的另一个“自定义”组,:

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 6000。

实验图

/image/gif/paws/10555/15f.gif

显示 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 接收比在端口 5/1(端口优先级值仍为 128)发送的 BPDU 更好的 BPDU。

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 

注意,仅 VLAN3 更改其优先级为 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)而不是本文档中描述的配置。


相关信息


Document ID: 10555