近期有多位读者问到Cisco交换机中利用STP配置负载均衡的方法,其实这在我的新书《Cisco/H3C交换机配置与管理完全手册》(第二版)(该书目前在当当网、卓越网和京东网等书店中全面热销中)中都有详细的配置步骤和实例。下面把这部分内容分享如下。
12.2 Cisco IOS交换机生成树负载均衡配置示例
在第11 章,我们已了解到,Cisco 自己开发的PVST 、PVST+ 和Rapid-PVST+l 因为是基于VLAN 分配生成树实例的,所以它不仅可以实现比IEEE 802.1D 标准的STP 更快的收敛速度,而且还可以实现负载均衡。为了避免环路,PVST 、PVST+ 和Rapid-PVST+l 仅会在交换机间的一条中继链路对特定VLAN 通信激活,其他的都会被全部阻止,以实现在多个中继端口上均衡VLAN 通信。在生成树VLAN 通信均衡方案中,又可以通过使STP 端口优先级或者STP 路径开销在中继端口进行配置。注意:对于使用 STP 端口优先级进行的负载均衡,负载均衡的多条中继链路必须与同一个交换机连接;对于使用 STP 路径开销进行的负载共享,每条用于负载均衡的中继链路可以连接到同一个交换机,也可以连接在两个不同的交换机上 。
【说明】IEEE 802.1s MSTP生成树模式中同样可以实现VLAN通信负载均衡,而且同样有两种方案:一种是基于端口优先级的,另一种是基于端口路径开销值的。但要注意的是,在MSTP的负载均衡配置中均只需在中继链路的一端配置即可,与本节介绍的SST下的负载均衡配置中的端口优先级方案有些区别,但与端口开销值方案一样。具体在本章最后介绍的PVST+到MSTP迁移配置示例中有体现。
12.2.1 使用STP端口优先级进行负载均衡的配置示例
当在一个交换机上的两个端口形成环路时,交换机使用STP 端口优先级来决定哪个端口是启用状态,哪个端口又是阻塞状态的。可以在平行的中继端口上设置优先级,以便这个端口可以承载指定VLAN 上的所有通信流,而在另一条中继链路承载其他VLAN 的通信。在一个VLAN 中,具有更高优先值的中继端口将转发该VLAN 中的通信流,而同一VLAN 中优先值低的中继端口将对VLAN 保持阻塞状态,使同一时间只有一个中继端口发送或者接收一个VLAN 中的所有通信流。
这种利用STP 端口的不同优先级实现不同VLAN 的负载均衡的配置思路如下:
(1 )把交换机间连接的STP 端口配置为二层中继端口;
(2 )把互联的两台交换机配置VTP 服务器模式,使用VTP 在不同交换机间中继VLAN 配置信息(当然也可以不启用VTP ,采用手动配置方式);
(3 )分别把两台交换机上的不同中继端口为不同VLAN 配置不同的VLAN 端口优先级,以实现VLAN 通信的分流。但要注意,这种负载均衡方案只应用于多条中继链路连接在同一对交换机上的情况下。
在如图12-1所示的示例中,互联的Switch A与Switch B之间有两个中继连接(Trunk 1和Trunk 2)。现在实现Switch A与Switch B之间的Trunk 1中继链路上只允许VLAN 8~VLAN 10的通信通过,而在Trunk 2中继链路上只允许VLAN 3~VLAN 6的通信通过。
图12-1 使用STP 端口优先级进行负载均衡的拓扑示例
为了达到这个目的,需要进行如下配置:
l 在VLAN 8~VLAN 10中分配Trunk 1上的端口优先值为16,优先级更高。
l 在VLAN 3~VLAN 6的Trunk 1上保持默认的端口优先值128,优先级较低。
l 在VLAN 3~VLAN 6中分配Trunk 2上的端口优先值为16,优先级更高。
l 在VLAN 8~VLAN 10的Trunk 2上保持默认的端口优先值128,优先级较低。
这样一来,Trunk 1只承载VLAN 8~10的通信,而Trunk 2只承载VLAN 3~VLAN 6的通信(优先值数越低,优先级别越高)。通过生成树协议可以实现在当前活动的中继链路失效,则具有更低优先级的中继链路会接替原来正常的中继链路的工作,承载以上所有VLAN的通信流。继续保持在所有中继端口都没有重复的通信流发生。
以上示例中,使用STP 端口优先级进行负载均衡的具体配置步骤如表12-12 所示(自特权模式开始)。两交换机上的生成树协议直接采用默认的PVST+ ,所以并没有单独启用生成树协议。其他具体环境只需稍做修改就可以满足应用需求。
spanning-tree [vlan vlan-id] cost cost接口配置命令替代表12-12所示的spanning-tree [vlan vlan-id] port-priority priority接口配置命令来选择置于转发状态的接口,为要首先选择的接口分配较低花费值,为后面选择的接口分配更高的花费值,具体将在下节介绍。
表12-12 使用STP 端口优先级进行共享负载的配置步骤
步骤 | 命令 | 用途说明 |
1 | configure terminal | 在Switch A 上进入全局配置模式 |
2 | Switch(config)#vtp domain domain-name | 配置一个VTP管理域,域名可以有1~32个字符 |
3 | vtp mode server | 配置Switch A 作为VTP 服务器 |
4 | end | 返回到特权模式 |
5 | show vtp status | 在Switch A 和Switch B上校验VTP配置,主要在输出信息中检查VTP Operating Mode(VTP操作模式)和VTP Domain Name(VTP域名)字段 |
6 | show vlan | 在Switch A 的VLAN 数据库中查看现有的VLAN |
7 | configure terminal | 进入全局配置模式 |
8 | Switch(config)#interface gigabitethernet 0/1 | 指定要配置为中继的接口,进入接口配置模式 |
9 | Switch(config-if)#switchport trunk encapsulation | 配置端口支持ISL 或IEEE 802.1Q 封装,或者与邻接接口协商封装类型。必须在每一个链路的两端配置相同的封装类型 |
10 | switchport mode trunk | 配置以上端口为中继端口 |
11 | end | 返回到特权模式 |
12 | Switch#show interfaces gigabitethernet 0/1 switchport | 校验以上接口的VLAN 配置 |
13 | 在Switch A上为第二个端口gigabitethernet 0/2重复以上第7~11步 | |
14 | 在Switch B上为与Switch A连接的两个端口重复以上第7~11步 | |
15 | show vlan | 当中继链路建立后,VTP 传递VTP 和VLAN 信息到Switch B 。此时通过这个命令可以校验Switch B 已学习到这些VLAN 配置 |
16 | configure terminal | 在Switch A 上进入全局配置模式 |
17 | Switch(config)#interface gigabitethernet 0/1 | 指定要设置STP 端口优先级的接口,并进入接口配置模式 |
18 | Switch(config-if)#spanning-tree vlan 8-10 port- | 在VLAN 8 ~VLAN 10 上为以上端口设置优先值为16 ,以达到在gigabitethernet0/1 中继端口上允许VLAN 8~ VALN 10 中通信的目的 |
19 | exit | 返回到全局配置模式 |
20 | Switch(config)#interface | 指定第二个要设置STP 端口优先级的接口,并进入接口配置模式 |
21 | Switch(config-if)#spanning-tree vlan 3-6 port- | 在VLAN 3 ~VLAN 6 上为以上端口设置优先值为16 ,以达到在gigabitethernet0/2 中继端口上允许VLAN 3~ VALN 6 中通信的目的 |
22 | end | 返回到全局配置模式 |
23 | show running-config | 校验以上条目设置 |
24 | copy running-config startup-config | (可选)在对应交换机的启动配置文件中保存以上设置 |
12.2.2 使用STP端口路径开销进行负载均衡的配置示例
除了可以利用上节介绍的STP 端口优先级实现不同中继链路上的VLAN 通信均衡外,还可以在中继端口上通过设置不同的路径开销配置实现中继端口上的负载均衡。而且本方案不仅适用于多条中继链路均在一对互联的交换机的情形,还可以在多条中继链路连接不同交换机的情形,可参见第11 章的图11-32 。
这种利用STP 端口的不同路径开销实现不同VLAN 的负载均衡的配置思路如下:
(1 )把交换机间连接的STP 端口配置为二层中继端口;
(2 )在互联的两台交换机配置VTP 服务器模式,使用VTP 在不同交换机间中继VLAN 配置信息(当然也可以不启用VTP ,采用手动配置方式);
(3 )只在一台交换机上的不同中继端口上为不同VLAN 配置不同的VLAN 端口路径开销,以实现VLAN 通信的分流。
在如图12-2所示的示例中,互联的Switch A与Switch B之间有两个中继连接(Trunk 1和Trunk 2,均为100BASE-T端口)。现在实现Switch A与Switch B之间的Trunk 1中继链路上只允许VLAN 8~VLAN 10的通信通过,而在Trunk 2中继链路上只允许VLAN 2~VLAN 4的通信通过。为了达到这个目的,需要进行如下配置(端口开销值越大,优先级越低):
l 在VLAN 2~VLAN 4分配Trunk 1上的端口路径开销值为30,具有较低优先级,以达到不转变该中继端口为转发状态,阻塞相应VLAN通信的目的。
l 在VLAN 8~VLAN 10中的Trunk 1上保持默认的100BASE-T路径开销值19,优先级较高,以达到转变该中继端口为转发状态,允许相应VLAN通信的目的。
l 在VLAN 8~VLAN 10中分配Trunk 2上的端口路径开销值为30,具有较低优先级,以达到不转变该中继端口为转发状态,阻塞相应VLAN通信的目的。
l 在VLAN 2~VLAN 4中的Trunk 2上保持默认的100BASE-T路径开销值19,优先级较高,以达到转变该中继端口为转发状态,允许相应VLAN通信的目的。
图12-2 使用STP 路径开销进行负载均衡的拓扑示例
图12-2 中示例的具体配置方法如表12-13 所示(自特权模式开始)。注意,采用这种方式实现负载均衡,只需在中继链路的一端交换机上进行配置即可。
表12-13 使用STP 路径开销进行负载共享的配置步骤
步骤 | 命令 | 用途说明 |
1 | configure terminal | 在Switch A 上进入全局配置模式 |
2 | Switch(config)#interface gigabitethernet0/1 | 指定要配置为中继的接口,进入接口配置模式 |
3 | Switch(config-if)#switchport trunk encapsulation isl | dot1q | negotiate} | 配置端口支持ISL 或IEEE 802.1Q 封装类型。必须在每一个链路的两端配置相同的封装类型 |
4 | switchport mode trunk | 配置以上端口为中继端口,并采用默认的ISL 中继方式 |
5 | exit | 返回到全局配置模式 |
6 | | 在Switch A上为第二个接口重复以上第2~5步 |
7 | end | 返回到特权模式 |
8 | show running-config | 校验以上设置。在输出信息中,确保接口已被配置为中继端口 |
9 | show vlan | 当中继链路建立后,Switch A可以接收来自其他交换机的VTP信息。通过此命令可以校验Switch A已接收到其他交换机的VLAN信息 |
10 | configure terminal | 进入到全局配置模式 |
11 | Switch(config)#interface gigabitethernet0/1 | 指定要设置路径开销的接口,进入接口配置模式 |
12 | Switch(config-if)#spanning-tree vlan 2-4 cost | 为VLAN 2 ~VLAN 4 设置生成权路径开销为30 ,以达到在gigabitethernet0/1 中继端口上阻塞VLAN 2~ VALN 4 中通信的目的 |
13 | exit | 返回到全局配置模式 |
14 | | 在Switch A的gigabitethernet0/2中继接口上重复以上第9~13步,并为VLAN 8~VLAN 10设置路径开销为30,以达到在gigabitethernet0/2中继端口上阻塞VLAN 8~ VALN 10中通信的目的 |
15 | Switch(config)#end | 返回到特权模式 |
16 | Switch#show running-config | 校验以上条目。在输出信息中,校验两个中继接口的路径开销设置正确 |
17 | copy running-config startup-config | (可选)在Switch A的启动配置文件中保存以上配置 |