数据中心网络架构的越来越扁平化,这种架构弱化了汇聚交换机的功能,在很多数据中心中,通过接入交换扩展服务器的接入数量,然后通过核心交换进行高速二层传输。在这种二层网络中,STP(Spanning Tree Protocol,生成树协议)为广泛采用的环路避免协议。
服务器接入的传统应用中有如下两种方式:
图1:两种MSTP应用组网
第一种拓扑我们称之为“矩形设计”,核心和接入交换机上均使能STP,没有单点故障,扩展性也比较好。但是,它存在的问题是,当其中一台接入交换机(比如左侧的接入交换机)的上行链路存在故障时,这台接入交换机的上行流量均要通过右侧接入交换机上行,那么右侧接入交换机的上行链路则可能存在拥塞。
第二种拓扑我们称之为“三角形组网”,同样使能STP,接入交换机均双上行到两台核心交换,在其中一台接入上行链路故障时,可通过STP快速切换到另外一条上行链路,避免了第一种拓扑中的上行拥塞问题,因此,这种拓扑在实际应用中得到了更为广泛的应用。后文的较佳实践举例中我们也采用了这种拓扑。
首先简单回顾下MSTP的运行的基本原理。MSTP将整个二层网络划分成不同的域(MST Region),一个域我们可以看出一个节点,如图2所示,整个网络就简化成了右侧的简单的4个节点的连接,我们称之为CST(Common Spanning Tree,公共生成树),CST为避免环路,采用的是RSTP协议进行的生成树计算,这是域间的计算方法。
图2: CST(公共生成树)
在域内,不同的域各自计算自己的多生成树,互相不干扰,相同的域内,按照实例(instance)分成不同的生成树,一个instance计算出一个生成树来,我们把图2中的Region1 来放大至图3,假如Region1 包含两个实例,instance1对应的VLAN为VLAN11至VLAN20,instance2对应的VLAN为VLAN21至VLAN30。
图3:稳定状态下的网络状态拓扑
核心交换机Core-1为Region1中instance1的域根,同时为instance0的根(即CIST ROOT,用于CST的计算),核心交换机Core-2为Region1中instance2的域根。那么,在稳定的状态下,我们分别得到图3所示的两个实例下的状态拓扑图:在instance1中,接入交换机LSW-1和LSW-2的右侧上行链路被阻塞,VLAN11-20的数据通过左侧的链路上行;在instance2中,状态相反,左侧的链路被阻塞,VLAN21-30的数据通过右侧链路上行。这样,不同VLAN的数据实现了负载分担和相互备份。
在实际的应用中,MSTP往往与VRRP配合起来使用,比如,在上图中,我们往往将VLAN 11-20的VRRP的Master设置在Core-1上,VLAN21-30的VRRP Master设置在Core-2上,这样,就形成了两种不同走向的数据流:
图4:MSTP中数据流的走向
下面,我们来考虑在MSTP中进行VLAN扩容,比如数据中心先前在规划的时候,只规划了VLAN11-30这20个VLAN,后续随着业务的不断发展,需要增加新的业务,要增加VLAN 31-100这70个VLAN。而现网又是有业务在运行,如何在最现网中增加这70个VLAN而又最大程度的减少业务的中断时间呢?这就是我们要下面要讨论的核心内容。
增加VLAN,实际上是改变了instance与VLAN的映射关系,也就是改变了MST Region,因为MST Region是通过instance与VLAN的映射关系通过散列算法计算出来的,这样我们在增加VLAN过程中相当于人为地把一个MST Region分裂成了两个MST Region(一个是没有增加VLAN的,一个是增加VLAN后的)。以先在接入交换机LSW-1中增加VLAN31-100与instance的对应关系为例,如图5:
图5:在LSW-1的instance中增加VLAN
为了便于说明,图中我们仅举了一台接入交换机LSW-1。本来网络所有设备属于同一个的MST Region,现在分裂成两个MST Region,我们称之为Region A和Region B,LSW-1因为VLAN与instance的映射关系与其它交换机不同而单独属于Region B。
现在来看CST的计算,由于我们将Core-1设置为了整个网络的总根(CIST Root),因此,Region B到Region A的两个通路必定有一个被阻塞,如图5,LSW-1的Port2被阻塞,LSW-1上的先前所有的业务都要通过Port1上行,对比图3中的状态,相当于VLAN21-30的流量要从Port2上行切换到Port1上行,VLAN11-20的依然通过Port1上行,保持不变。这个切换时间还是比较快的。
下面来看如果单独修改核心交换机Core-2的配置的情况,修改后CST的生成树状态如下:
图6:修改Core-2导致流量中断
Core-2的Port1被选成 Master Port,为Forwarding状态;Core-2的Port2端口变成discarding,接入交换机LSW-1的Port2在instance2中依然为forwarding状态,对应的流量依然通过此端口上行(见图3和图4)。此时LSW-1属于原来的Region A,而Core-2属于另外一个Region B,LSW-1的Port2无法收到Region A的instance2的BPDU报文,一直等待到BPDU超时。这个等待超时的过程长达18秒(视厂家不同超时时间略不相同),使得原instance 2对应的VLAN 21-30的流量中断。
从上面的两个例子可以看出,在现网中直接增加VLAN会导致流量多次的倒换和中断,并且在有些步骤中流量的倒换时间过长。
那么,如何解决在修改过程中经过MSTP计算导致的流量倒换时间过长问题?我们不妨改变一下思路,在修改前主动地将环路破坏掉,提前将流量切换到期望的走向(比如,在接入交换机上,提前将流量全部切换到Port1上)。在无环路的情况下,无论怎么修改LSW-1,MSTP中的端口状态都不会改变了,这样流量就不会因为MSTP协议的计算导致不可控的中断。破坏这种环路的方法很简单,只要手动关闭掉LSW-1上的Port2端口即可。
根据上面的思路,我们在对图4所示的MSTP应用进行VLAN扩容的时候,较佳的操作步骤应该为:
第一步:依次手动关闭所有接入交换机的其中一个上行端口,使流量倒换;
第二步:依次修改接入交换机的instance与VLAN的映射,增加VLAN,MST Region分裂,但是流量走向不因配置而改变。
第三步:在最短的时间内修改核心交换机的instance与VLAN的映射,与接入交换机形成相同的MST Region;
第四步:依次手动恢复接入交换机的上行端口,网络恢复正常。
另外,由于在MSTP中增加和删除VLAN对于MSTP产生的效果是一样的(MST Region分裂),因此,上述步骤同样适用于在MSTP中进行删除VLAN的操作。