理解鏈路聚合
鏈路聚合的優點
- 增加鏈路帶寬:多個鏈路匯聚為一個大帶寬鏈路,一般採用基於流的負載均衡模式。
- 增加鏈路的可靠性:通過聚合組的多個鏈路,一條物理鏈路出問題,不影響整個邏輯聚合組鏈路。
- 減少STP的使用。
鏈路聚合成員介面管理常用的兩種形式
- 靜態LACP聚合:不需要使用控制協議(i.e 不使用基於網路的協議),通過手工配置生效,當聚合口組成員埠啟動後,立即生效(成為活動的成員埠)。
- 動態LACP聚合:需要使用鏈路聚合控制協議(LACP),埠通過配置加鏈路聚合組,但是否生效(被選中成為活動的成員埠)取決於LACP的協商結果。
鏈路聚合分為動態與靜態兩種,靜態模式的鏈路聚合會造成不可預料的問題,在多數情況下建議使用動態模式下的鏈路聚合,使用鏈路聚合控制協議自動去協商、評估、聚合鏈路。這節從最常見的鏈路聚合控制協議(LACP)入手,分析鏈路聚合的原理。
鏈路聚合的控制面協議 – LACP
LACP為交換數據的設備提供一種標準的協商方式,以供系統根據自身配置自動形成聚合鏈路並啟動聚合鏈路收發數據。聚合鏈路形成以後,負責維護鏈路狀態。在聚合條件發生變化時,自動調整或解散鏈路聚合。LACP工作的基本流程如下:
- 鄰居發現:在設備SwitchA和SwitchB上創建Eth-Trunk並配置為靜態LACP模式,然後向Eth-Trunk中手工加入成員介面。此時成員介面上便啟用了LACP協議,兩端互相發出LACPDU報文。
1. 鄰居發現
- 確定主動端:兩端設備均會收到對端發來的LACP報文。以SwitchB為例,當SwitchB收到SwitchA發送的LACP報文時,SwitchB會查看並記錄對端信息,並且比較系統優先順序欄位,如果對端設備SwitchA的系統優先順序高於本端設備SwitchB的系統優先順序,則確定SwitchA為LACP主動端,SwitchB將按照SwitchA的介面優先順序選擇活動介面,從而兩端設備對於活動介面的選擇達成一致。
2. 確定主動端
- 確定活動埠:兩端設備選出主動端後,兩端都會以主動端的介面優先順序來選擇活動介面。兩端設備選擇了一致的活動介面,活動鏈路組便可以建立起來,從這些活動鏈路中以負載分擔的方式轉發數據。
3. 確定活動埠的全過程
4. 鏈路的保護與切換:
- 切換時機:靜態模式鏈路聚合組兩端設備中任何一端檢測到以下事件,都會觸發聚合組的鏈路切換:
- 鏈路Down事件。
- ETH-OAM檢測到鏈路失效。LACP協議發現鏈路故障。介面不可用。
- 在使能了LACP搶佔前提下,更改備份介面的優先順序高於當前活動介面的優先順序後,會發生切換的過程。
- 切換流程:當滿足上述切換條件其中之一時,按照如下步驟進行切換:
- 關閉故障鏈路。
- 從N條備份鏈路中選擇優先順序最高的鏈路接替活動鏈路中的故障鏈路。
- 優先順序最高的備份鏈路轉為活動狀態並轉發數據,完成切換。
- 鏈路搶佔:使能LACP搶佔後,聚合組會始終保持高優先順序的介面作為活動介面的狀態。如下圖所示,GE1/0/1、GE1/0/2和GE1/0/3為Eth-Trunk 1的成員介面,活動介面數最大上限閾值為2,配置GE1/0/1和GE1/0/2介面的LACP優先順序分別為9和10,GE1/0/3保持預設介面LACP優先順序。當通過LACP協議協商完畢後,GE1/0/1、GE1/0/2介面因為優先順序較高被選作活動介面,GE1/0/3介面成為備份介面。
活動介面與備份介面
以下兩種情況需要使能LACP的搶佔功能。- GE1/0/1介面出現故障而後又恢復了正常。當介面GE1/0/1出現故障時被GE1/0/3所取代,如果在Eth-Trunk介面下未使能搶佔,則故障恢復時GE1/0/1仍然保持備份介面狀態;如果使能了LACP搶佔,當GE1/0/1故障恢復時可以重新成為活動介面,GE1/0/3再次成為備份介面。
- 如果用戶希望GE1/0/3介面替換GE1/0/1、GE1/0/2中的一個介面成為活動介面,可以通過更改GE1/0/3的介面LACP優先順序為8或更小的數值來實現,但前提條件是已經使能了LACP搶佔功能。如果沒有使能LACP搶佔功能,即使將備份介面的優先順序調整為高於當前活動介面的優先順序,系統也不會進行重新選擇活動介面的過程,不切換活動介面。
- 搶佔延時的概念:LACP搶佔發生時,處於備用狀態的鏈路將會等待一段時間後再切換到轉髮狀態,這就是搶佔延時。搶佔延時是一個可配置的值,默認為30s,可配置範圍為10s~180s。
配置搶佔延時是為了避免由於某些鏈路狀態頻繁變化而導致整個Eth-Trunk數據傳輸不穩定。如圖8所示,GE1/0/1由於鏈路故障切換為非活動介面,此後該鏈路又恢復了正常。由於系統使能了LACP搶佔,經過搶佔延時後,GE1/0/1會重新切換到活動狀態。
負載均衡與權重
鏈路聚合分發需有一定的負載均衡演算法, 使數據幀相對均勻的分布在不同的成員鏈路上,達到擴展帶寬的作用。不同的鏈路聚合實現有多種分發負載演算法,但每種分發演算法最好都不要產生:
- 給定的會話7 數據幀亂序
- 數據幀重複
數據幀亂序或者重複都會對接收者造成不良影響,為避免產生著兩種情況,有一個約定俗成的規則,即:所有屬於給定會話的數據幀 必須保證從同一鏈路轉發。 這就要求給定會話無論何時到達Frame Distributor,Frame Distributor需要為其選擇固定的一條鏈路,也就是說選擇演算法是」history Independent」,可以為每個會話維護一張轉發埠的對應表,當第一個數據幀選擇鏈路轉發後,後續的數據幀依照轉發表轉發,如此減輕設備的計算負擔。
幾種負載均衡演算法
滿足上述規則的負載方式有很多,鏈路聚合可以使用 MAC 、IP、Layer4 port numbers 逐流負載,可以是基於源地址(埠)、目的地址(埠)或者兩種都有8。可以根據不同的拓撲類型選擇不同的負載方法。
Example A 是典型的「多對多」傳輸的場景,SW1 和 SW2 之間的聚合鏈路基於源MAC或目的MAC(src-mac or dst-mac)分發,即可將流量負載在各個成員鏈路;Example B 多台PC同一台路由器通信,路由器的IP、MAC都只有一個,因此源自PC的流量需使用源MAC 負載,源自路由器的流量需使用目的MAC負載。(SW1 src-mac,SW2 dst-mac);
Example C 假設兩台伺服器所有的通信都使用相同的MAC地址,若實現負載,基於IP或MAC的負載方式都不行,可利用高層協議的信息負載,比如Layer4 port numbers。參考資料:
鏈路聚合工作原理:鏈路聚合工作原理 -- kummer話你知
鏈路聚合(Link Aggregation)與權重:鏈路聚合(Link Aggregation)與權重
推薦閱讀:
※探究 tcp 協議中的三次握手與四次揮手
※細說OSI七層協議模型及OSI參考模型中的數據封裝過程?
※讓 CPU 告訴你硬碟和網路到底有多慢
※UBUNTU 伺服器配網
※怎麼看待網路購物趨於理性?