袁智勇 劉文林

摘 要:文章介紹的多生成樹協議的歷史,以及它的特點。并對相關的一些容易讓人誤解的術語做了澄清。最后以一個配置實例講解如何通過多生成樹協議實現基于VLAN的負載均衡。
關鍵詞:多生成樹協議;STP;VLAN;區域;實例;負載均衡
網上配置多生成樹協議的例子是非常多的,但它們有個共同特點:只講配置步驟,不講原理。這好比教人武術只講招式不講心法一樣,搞不好將人引入歧途。廠家為何這么做,肯定有其目的,我們就不揣測了。還是自己動手,豐衣足食吧。引入生成樹協議的目的是為了防止交換式以太網因為網絡中存在環路,誘發廣播風暴。最初的標準是STP(Spanning Tree Protocol),因為它的收斂速度太慢,于是又引入了RSTP(Rapid STP)。RSTP大大提高了生成樹協議的收斂速度,并廢除了和取代了STP。交換式網絡的核心設備是交換機,和路由器不同,它會轉發廣播。因此,交換機無法隔離廣播,多個交換機連接起來將構成一個大的廣播域。但是VLAN的出現改變了這種狀況。通過VLAN技術我們可以把一個大的LAN劃分為若干個邏輯上的VLAN,VLAN之間的數據是相互隔離的,除非通過路由器,它們之間無法通信。這也意味著支持VLAN的交換機可以像路由器一樣隔離廣播。VLAN技術可以將廣播風暴限制于VLAN的范圍內。基于此,STP協議應該做個重大修改。不是在整個LAN的范圍內計算生成樹,而是每個VLAN獨立計算一顆生成樹。多生成樹協議(Multiple STP,MST)就是VLAN版的RSTP,為每個VLAN計算一顆RSTP生成樹。了解到這一點,而且你熟悉RSTP的配置,配置MSTP就不是什么大的問題了。
一般而言,一個VLAN只是LAN的一部分,不會覆蓋整個LAN。因此基于VLAN計算生成樹可以減少工作量。MSTP最好和VTP(VLAN Trun Protocol)協議結合起來,因為VTP可以收集VLAN在LAN中的分布信息。如果某個交換機的所有端口都不是某個VLAN的成員,那么這個交換機可以排除于這個VLAN的RSTP生成樹之外。不過要注意的是用于交換機級聯的端口一般設置為trunk模式,默認情況下,任何VLAN的流量都可以通過trunk端口,因此我們可以將trunk端口看作任何VLAN的成員。但在實際當中,經過trunk端口的VLAN數量一般是有限的,我們最好將trunk端口允許通過哪些VLAN流量做個明確的限定。容易讓初學者迷惑的是幾個術語。
一個術語是區域(Region)。如果LAN比較大的話,可以考慮將LAN劃分為若干區域,分開來管理。這就和OSPF將Internet劃分為若干自治系統來管理一個道理。但實際上很少有LAN會大到非要劃分為若干區域來管理。一般來說,整個LAN就是一個區域。我們只需在這個默認的區域內配置即可,不必考慮區域劃分的問題。
另一個術語是實例(Instance)。這名字取得可不怎么樣,一些文章將其解釋得神神秘秘,其實它就是一種“組”。打個比方,默認情況下,交換機的端口都是自動協商的。假設你非要手工配置為非自動協商的模式,一個48口的交換機,你就要配置48次。你可能就會想,能不能將這48個口歸入一個組,然后配置這個組,這樣就省事多了。實例實際上就是這種性質的組,用于將多個VLAN歸入一個組中,然后集中配置。
圖1 通過MSTP實現負載均衡
我們還是舉例來說明吧。MST一個應用就是基于VLAN的負載均衡。請看圖1,為提高可靠性,網絡配置了兩臺核心交換機A和B,它們同時工作,各分攤一半的負荷。如果某臺核心交換機出了故障,另一臺核心交換機接管所有的負荷。C是一臺接入層交換機,接入層交換機應該有很多臺,但為簡單起見,圖中只標出了一臺。每臺接入層交換機都有兩條線,分別連接到A和B,假設所有線路開銷都是一樣的。再假設,每臺交換機都定義了1000個VLAN。規定正常情況下,1-500的VLAN流量由A處理,501-1000的VLAN流量由B處理。要做到這點,我們可以將VLAN 1-500歸入一個實例1中,實例1以A為根交換機,最終的生成樹將把B和C之間的鏈路阻塞掉,于是VLAN 1-500的流量只能走交換機A了。如果,A出現故障,交換機重新計算生成樹,B和C之間的線路解除阻塞,VLAN1-500的流量改由B來處理。同理,我們可以將VLAN501-1000歸入另一個實例2中,實例2以B為根交換機。下面是A交換機的配置腳本(以IOS為例):
switchA# configure terminal
switchA(config)# spanning-tree mode mst
——開啟MST
switchA(config)# spanning-tree mst configuration
——進入MST配置模式
switchA(config-mst)# instance 1 vlan 1-500
——創建包含vlan1-500的實例1
switchA(config-mst)# instance 2 vlan 501-1000
——創建包含vlan501-1000的實例2
switchA(config-mst)# exit
switchA(config)# spanning-tree mst 1 root primary
——設置本交換機為實例1的根交換機
可以看出如果沒有實例,每個VLAN都要分別設置根交換機,工作量是非常大的。從這個例子我們很容易看出引入實例的必要性。交換機B的配置和A的差不多,差別只是最后一行腳本替換為spanning-tree mst 2 root primary。C也需配置MST,和A的配置也差不多,只需將最后一行腳本去掉。
參考文獻
[1]Understanding Multiple Spanning Tree Protocol(802.1s).http://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/24248-147.html?referring_site=bodynav.
[2]VLAN Trunking Protocol. http://en.wikipedia.org/wiki/VLAN_Trunking_Protocol.