文/石瑞華
隨著網絡規模的不斷擴大,對網絡設備可靠性的要求也在不斷提高。尤其是在數據中心的應用場景中,幾乎所有的數據中心服務器都需要實現雙歸屬,通過雙網卡形成鏈路聚合,再分別雙上聯交換設備,以增強其可靠性。當任何一臺上聯交換機出問題,或者任何一個上聯端口出問題,都能實現快速切換,業務上切換時間實現小于50ms,丟包達到最小化。
要實現雙歸屬,最常用的技術手段包括堆疊技術和MLAG技術。
堆疊技術,即Stacking技術,主要是將兩臺或者多臺設備通過堆疊口按照一定的形式進行互聯互通。比如最常用的就是總線型組網和環型組網,復雜的還有星型組網等。這些設備對外呈現出的是一臺設備。也就是說,這些設備互聯之后,就組合成了一臺大型設備,每臺設備只相當于這一臺大設備中的一塊子線卡。
所有的設備都可以實現數據轉發功能。在這些設備中有一臺主設備,主要負責控制層面的運算。另外還有一臺備設備,主要負責控制層面的備份,以應對主設備的意外故障。除了上述主備兩臺設備之外,其他的設備都稱為從設備,只負責數據轉發,不負責任何控制層面的運算。所有的配置信息都需要從主設備進行下發,下發到包括主設備、備設備和眾多從設備在內的所有設備上。總的來說,堆疊系統就是一主一備多從的設備,通過一定的互聯互通方式,實現的設備虛擬化技術。
對于大部分數據中心的應用來說,高可靠性固然重要,但并不需要太多的設備來實現這樣的可靠性。一般來說,數據中心服務器只需要通過雙網卡來實現聚合口雙歸屬即可,并不需要能支持多臺設備的堆疊技術。而且,一般支持堆疊系統的設備實現復雜。除了堆疊系統本身之外,所有模塊還都需要支持HA(High Available,高可用性集群),需要實現實時備份、批量備份和數據平滑。這樣復雜的系統一般價格昂貴,性價比低,不是一般小型數據中心能夠承擔的。是否有一種輕量化的技術能用來替代堆疊系統呢,這就引出了本文要重點介紹的MLAG技術。

圖1:MLAG技術示意圖
MLAG全稱是Multi-Chassis Link-Aggregation,即跨設備鏈路聚合。MLAG通過把兩臺設備的相關端口配置到同一個MLAG組中,來實現跨設備的鏈路聚合。這是一種端口虛擬化技術。兩臺設備并未像堆疊一樣合成一臺設備,兩臺設備還是分別獨立的設備,無需進行復雜的控制面備份,實現相對簡單,目前已被廣泛使用。
如圖1所示,下面兩臺雙網卡服務器分別通過兩條鏈路直接連接到上面的兩臺交換設備,這兩條鏈路之間通過靜態聚合或者LACP(Link Aggregation Control Protocol,鏈路匯聚控制協議)形成鏈路聚合組,以實現增大帶寬和鏈路備份的功能。這兩臺服務器完全不需要感知到上行鏈路是兩臺設備還是一臺設備。
對于上面的兩臺MLAG交換設備來說,和下行設備連接的兩個端口需要綁定到同一個MLAG組內,對外表現成同一個聚合端口。當然連接的端口也可以是多個端口,比如一邊3個端口,一共6個端口形成一個MLAG組,對外表現成一個有6個成員端口的聚合組。
對于上面兩臺MLAG設備來說,還需要通過中間的一條設備間聚合鏈路連接在一起,這條鏈路一般稱作Peer-link。Peer-link可以讓兩臺設備互相感知對方的存在,互相發送一些控制面信息。例如之前提到的如果要配置成同一個MLAG組的不同端口,彼此需要感知到對方的存在,這就要通過中間這條Peer-link鏈路發送信息來實現。另外,在下行MLAG口DOWN掉的時候,Peer-link還需要負責一部分數據流量的轉發。
MLAG兩臺設備之間通過TCP連接,可以通過系統MAC地址選舉出一臺主設備和一臺備設備。這里的主備僅就控制層面進行區分,在數據層面兩臺設備是對等的,并無主備的區別。
MLAG對于單播數據報文轉發的核心實現原理是,下聯口無論從哪個方向學習到FDB(Forwarding DataBase,MAC地址轉發表),均會通過Peer-link同步到對端設備,并且將出口填成在本設備上對應的MLAG口。這樣來自上聯口(或者其他下聯口)的數據報文無論從哪臺設備過來,都能查找到FDB表項進行二層轉發,而且是本地轉發,無需通過Peer-link。
當下行端口中的任何一個端口DOWN掉,系統需要把在這個口上學習到的FDB的出口全部切換成Peer-link,讓對應的數據報文收到之后可以通過Peer-link轉發到對端設備,以實現下行聚合口的不間斷數據轉發。當DOWN掉的端口恢復時,系統再把指向Peer-link的出口再次切換回正常的下行聚合口,報文又可以恢復本地轉發。
值得注意的是,FDB的老化只能在學習到的設備上完成,另一臺設備不能在同步來的表項上做老化處理,否則會引起兩臺設備表項的不一致。
另外,系統配置的MLAG聚合組可以和AGG(Aggregation,聚合)聚合組一一對應,每個AGG聚合組只能綁定到一個MLAG組中,一個MLAG組也只能被一個AGG綁定。
最后,如果交換設備上除了MLAG口之外,還存在其他的非MLAG口(一般稱之為Orphan Port),那么系統也可以進行處理。處理方法是,將Orphan Port上學到的FDB通過Peer-link同步到鄰居設備,在該鄰居設備上將此FDB出口指向Peer-link。收到數據報文的時候,通過Peer-link將報文轉發到擁有這個Orphan Port的設備上,進行正常轉發。
對于MAC地址全F(全1)的廣播報文以及未知單播報文,系統需要做VLAN內廣播處理。由于兩臺設備上均存在VLAN成員端口,以及上面提到的Orphan Port的存在,所以廣播報文需要通過Peer-link轉發到鄰居設備。
最關鍵的問題在于,如何避免兩臺設備上同一個MLAG組內的端口同時轉發這個廣播流量,造成下行設備上收到雙份數據流。處理此問題的核心原則是,設備對于來自Peer-link的流量往下行MLAG成員口做端口隔離,即不允許來自Peer-link的流量走下行MLAG成員口。但隔離有個前提,就是這個被隔離的成員口所對應的在鄰居設備上的成員口是UP的。這樣就能有效的避免雙分流的產生。
當MLAG成員口發生DOWN的時候,系統需要將鄰居設備上的對應口上的隔離打開,這樣廣播報文就能順利的通過Peer-link從對應的MLAG成員口上被轉發出來。等DOWN掉的口恢復時,系統再將鄰居設備上對應的MLAG成員口上的隔離關閉,以免雙份流量的產生。
此隔離主要用于廣播流量。對于單播流量,只要處理好FDB成員口的切換,讓其在MLAG口沒有DOWN的時候進行本地轉發,而不要轉到Peer-link上,就不會存在雙份流的問題。
在二層網絡中,為了避免廣播風暴,一般會使用STP(Spanning Tree Protocol,生成樹協議)。STP協議通過BPDU(Bridge Protocol Data Unit,網橋協議數據單元)報文進行協議處理。MLAG環境下兩臺設備是獨立的設備,互相之間不做協議同步,所以不能讓兩臺設備分別計算。否則一旦兩臺設備計算結果不一致,會造成兩臺設備上的MLAG成員口一邊被阻塞而另一邊被打開,從而引起故障。此時一般的做法是不論哪臺設備上收到BPDU報文,均送給主設備進行STP協議運算,由主設備算出結果,再將結果分發到備設備上。
細節上還有其他需要討論的內容,限于篇幅本文就不做展開了。
本文基于數據中心服務器雙歸屬的實際應用場景,介紹了一種輕量化的端口虛擬化的MLAG技術,通過該技術可以很方便的做到跨設備的鏈路聚合,以解決數據中心服務器對于高可靠性的要求。