好久沒寫博客了!武漢肺炎也沒法上班,只能在家學習學習,安排了學習lacp,上網查找資料,整理彙總了一下。
以太網鏈路聚合Eth-Trunk簡稱鏈路聚合,通過將多個物理接口捆綁爲一個邏輯接口,可以在不進行硬件升級的條件下,達到增加鏈路帶寬的目的。
鏈路聚合技術主要有以下三個優勢:
1.增加帶寬
鏈路聚合接口的最大帶寬可以達到各成員接口帶寬之和。
2.提高可靠性
當某條活動鏈路出現故障時,流量可以切換到其他可用的成員鏈路上,從而提高鏈路聚合接口的可靠性。
3.負載分擔
在一個鏈路聚合組內,可以實現在各成員活動鏈路上的負載分擔。
鏈路聚合組和鏈路聚合接口
鏈路聚合組LAG(Link Aggregation Group)是指將若干條以太鏈路捆綁在一起所形成的邏輯鏈路。
每個聚合組唯一對應着一個邏輯接口,這個邏輯接口稱之爲鏈路聚合接口或Eth-Trunk接口。鏈路聚合接口可以作爲普通的以太網接口來使用,與普通以太網接口的差別在於:轉發的時候鏈路聚合組需要從成員接口中選擇一個或多個接口來進行數據轉發。
成員接口和成員鏈路
組成Eth-Trunk接口的各個物理接口稱爲成員接口。成員接口對應的鏈路稱爲成員鏈路。
活動接口和非活動接口、活動鏈路和非活動鏈路
鏈路聚合組的成員接口存在活動接口和非活動接口兩種。轉發數據的接口稱爲活動接口,不轉發數據的接口稱爲非活動接口。
活動接口對應的鏈路稱爲活動鏈路,非活動接口對應的鏈路稱爲非活動鏈路。
活動接口數上限閾值
設置活動接口數上限閾值的目的是在保證帶寬的情況下提高網絡的可靠性。當前活動接口數目達到上限閾值時,再向Eth-Trunk中添加成員接口,不會增加Eth-Trunk活動接口的數目,超過上限閾值的鏈路狀態將被置爲Down,作爲備份鏈路。
例如,有8條無故障鏈路在一個Eth-Trunk內,每條鏈路都能提供1G的帶寬,現在最多需要5G的帶寬,那麼上限閾值就可以設爲5或者更大的值。其他的鏈路就自動進入備份狀態以提高網絡的可靠性。
活動接口下限閾值
設置活動接口數下限閾值是爲了保證最小帶寬,當前活動鏈路數目小於下限閾值時,Eth-Trunk接口的狀態轉爲Down。
例如,每條物理鏈路能提供1G的帶寬,現在最小需要2G的帶寬,那麼活動接口數下限閾值必須要大於等於2。
鏈路聚合模式
根據是否啓用鏈路聚合控制協議LACP(Link Aggregation Control Protocol),鏈路聚合分爲手工模式和LACP模式。
鏈路聚合方式
同板:是指鏈路聚合時,同一聚合組的成員接口分佈在同一單板上。
跨板:是指鏈路聚合時,同一聚合組的成員接口分佈在不同的單板上。
跨框:是指在集羣場景下,成員接口分佈在集羣的各個成員設備上。具體請參見集羣環境下的鏈路聚合。
跨設備:是指E-Trunk基於LACP(單臺設備鏈路聚合的標準)進行了擴展,能夠實現多臺設備間的鏈路聚合。
手工模式鏈路聚合
手工模式下,Eth-Trunk的建立、成員接口的加入由手工配置,沒有鏈路聚合控制協議LACP的參與。該模式下所有活動鏈路都參與數據的轉發,平均分擔流量。如果某條活動鏈路故障,鏈路聚合組自動在剩餘的活動鏈路中平均分擔流量。
當需要在兩個直連設備之間提供一個較大的鏈路帶寬,而其中一端或兩端設備都不支持LACP協議時,可以配置手工模式鏈路聚合。
LACP模式鏈路聚合
鏈路聚合控制協議LACP(Link Aggregation Control Protocol),是基於IEEE802.3ad標準的一種實現鏈路動態聚合與解聚合的協議,以供設備根據自身配置自動形成聚合鏈路並啓動聚合鏈路收發數據,LACP模式就是採用LACP的一種鏈路聚合模式。聚合鏈路形成以後,LACP負責維護鏈路狀態,在聚合條件發生變化時,自動調整鏈路聚合。
對比手工模式和LACP模式:
- Eth-Trunk的建立方式
手工模式:Eth-Trunk的建立、成員接口的加入由手工配置,沒有鏈路聚合控制協議的參與。
LACP模式:Eth-Trunk的建立是基於LACP協議的,LACP爲交換數據的設備提供一種標準的協商方式,以供系統根據自身配置自動形成聚合鏈路並啓動聚合鏈路收發數據。聚合鏈路形成以後,負責維護鏈路狀態。在聚合條件發生變化時,自動調整或解散鏈路聚合。
- 設備是否需要支持LACP協議
手工模式:不需要
LACP模式:需要
- 數據轉發
手工模式:正常情況下,所有鏈路都是活動鏈路。所有活動鏈路均參與數據轉發。如果某條活動鏈路故障,鏈路聚合組自動在剩餘的活動鏈路中分擔流量。
LACP模式:正常情況下,部分鏈路是活動鏈路。所有活動鏈路均參與數據轉發。如果某條活動鏈路故障,鏈路聚合組自動在非活動鏈路中選擇一條鏈路作爲活動鏈路,參與數據轉發的鏈路數目不變。
- 是否支持跨設備的鏈路聚合
手工模式:不支持
LACP模式:支持
- 檢測故障
手工模式:只能檢測到同一聚合組內的成員鏈路有斷路等有限故障,但是無法檢測到鏈路斷連、錯連等故障。
LACP模式:不僅能夠檢測到同一聚合組內的成員鏈路有斷路等有限故障,還可以檢測到鏈路故障、鏈路錯連等故障。
LACP模式鏈路聚合
系統LACP優先級
系統LACP優先級是爲了區分兩端設備優先級的高低而配置的參數。LACP模式下,兩端設備所選擇的活動接口必須保持一致,否則鏈路聚合組就無法建立。此時可以使其中一端具有更高的優先級,另一端根據高優先級的一端來選擇活動接口即可。系統LACP優先級值越小優先級越高。
接口LACP優先級
接口LACP優先級是爲了區別同一個Eth-Trunk中的不同接口被選爲活動接口的優先程度,優先級高的接口將優先被選爲活動接口。接口LACP優先級值越小,優先級越高。
成員接口間M:N備份
LACP模式鏈路聚合由LACP確定聚合組中的活動和非活動鏈路,又稱爲M:N模式,即M條活動鏈路與N條備份鏈路的模式。這種模式提供了更高的鏈路可靠性,並且可以在M條鏈路中實現不同方式的負載均衡。
例如:兩臺設備間有M+N條鏈路,在聚合鏈路上轉發流量時在M條鏈路上分擔負載,即活動鏈路,不在另外的N條鏈路轉發流量,這N條鏈路提供備份功能,即備份鏈路。此時鏈路的實際帶寬爲M條鏈路的總和,但是能提供的最大帶寬爲M+N條鏈路的總和。
當M條鏈路中有一條鏈路故障時,LACP會從N條備份鏈路中找出一條優先級高的可用鏈路替換故障鏈路。此時鏈路的實際帶寬還是M條鏈路的總和,但是能提供的最大帶寬就變爲M+N-1條鏈路的總和。
這種場景主要應用在只向用戶提供M條鏈路的帶寬,同時又希望提供一定的故障保護能力時。當有一條鏈路出現故障,系統能夠自動選擇一條優先級最高的可用備份鏈路變爲活動鏈路。
如果在備份鏈路中無法找到可用鏈路,並且目前處於活動狀態的鏈路數目低於配置的活動接口數下限閾值,那麼系統將會把聚合接口關閉。
LACP模式實現原理
LACP通過鏈路聚合控制協議數據單元LACPDU(Link Aggregation Control Protocol Data Unit)與對端交互信息,LACPDU報文中包含設備的系統優先級、MAC地址、接口優先級、接口號和操作Key等信息。
LACP交互過程:
1.在LACP模式的Eth-Trunk中加入成員接口後,兩端互相發送LACPDU報文。
2.確定主動端和活動鏈路。
端口狀態協商(selected、standby)
在動態匯聚組中,端口可能處於兩種狀態:Selected 或Standby。Selected 端口和Standby 端口都能收發LACP 協議,但Standby 端口不能轉發用戶報文。由於設備所能支持的匯聚組中的最大端口數有限制,如果當前的成員端口數量超過了最大端口數的限制,則本端系統和對端系統會進行協商,根據設備ID 優的一端的端口ID 的大小,來決定端口的狀態。具體協商步驟如下:
比較設備ID(系統優先級+系統MAC 地址)。先比較系統優先級,如果相同再比較系統MAC 地址。設備ID 小的一端被認爲優。
比較端口ID(端口優先級+端口號)。對於設備ID 優的一端的各個端口,首先比較端口優先級,如果優先級相同再比較端口號。端口ID 小的端口爲Selected 端口,剩餘端口爲Standby 端口。在一個匯聚組中,處於Selected 狀態且端口號最小的端口爲匯聚組的主端口,其他處於Selected 狀態的端口爲匯聚組的成員端口。
動態LACP:
動態LACP 模式下,Eth-Trunk 接口的建立,成員接口的加入,活動接口的選擇完全由LACP 協議通過協商完成。這就意味着啓用了動態LACP 協議的兩臺直連設備上,不需要創建Eth-Trunk 接口,也不需要指定哪些接口作爲聚合組成員接口,兩臺設備會通過LACP 協商自動完成鏈路的聚合操作。動態LACP 匯聚是一種系統自動創建/刪除的匯聚,不允許用戶增加或刪除動態LACP 匯聚中的成員端口。只有速率和雙工屬性相同、連接到同一個設備、有相同基本配置的端口才能被動態匯聚在一起。即使只有一個端口也可以創建動態匯聚,此時爲單端口匯聚。動態匯聚中,端口的LACP 協議處於使能狀態。
LACP報文格式(推薦華爲的報文查詢工具):
目的地址是組播地址:01-80-C2-00-00-02
協議類型:0x8809
報文子類型:0x01(LACP)
Actor tlv
Partner tlv
鏈路聚合控制的相關參數
1.LACP協議如何唯一的標識聚合組:
系統ID(System ID) ,由「系統優先級+系統MAC地址」組成,其中,之所以要有「系統優先級」,是因爲LACP協議中,鏈路聚合兩端設備扮演不同角色,有了「系統優先級」,管理員可以通過配置干預角色選舉。
2.端口ID(Port ID):
對於參與鏈路聚合的各個端口,也需要在設備內部唯一標識,端口ID由「端口優先級+端口號」組成,之所以需要「端口優先級」,也是因爲涉及端口的不同角色選舉
3.聚合ID:
在一個設備上,能進行多組聚合,即有多個Aggregator,爲了區分這些Aggregator,給每個Aggregator分配了一個聚合ID(Aggregator ID),爲一個16位整數
端口Key
聚合端口中有兩種key:一種是操作key,一種是管理key。
操作key是爲形成聚合當前使用的key,管理key是允許管理者對key值進行操作的key。
操作Key
在動態LACP聚合中,只有操作KEY相同的端口才能屬於同一個聚合組,你可以認爲操作KEY相同的端口,其屬性相同。
在手工聚合和靜態LACP聚合中,雖然同一個聚合組中的端口的操作KEY不一定相同(因端口由管理員手工加入),但是Selected端口的操作KEY一定相同。
操作Key 是在端口匯聚時,系統根據端口的配置(即速率、雙工、基本配置、管理Key)生成的一個配置組合。
1.對於手工匯聚組和靜態匯聚組,Selected 的端口有相同的操作Key。
2.靜態匯聚端口在使能LACP 後,端口的管理Key 與匯聚組ID 相同。
3.動態匯聚端口在使能LACP 協議後,其管理Key 預設爲零。
4.對於動態匯聚組,同組成員一定有相同的操作Key。
六要素
1.四個要素:
一個聚合組來說,如果需要進行唯一標識的話,需要包含四個元素:本端系統ID、本端操作KEY、對端系統ID、對端操作KEY
2.兩個要素:
系統中並不是所有聚合組都包含多個鏈路,爲了區分只包含單個鏈路的聚合組的情況,還需要額外加上兩個元素:本端端口ID和對端端口ID。
3.結論:
這六個元素唯一確定了一個聚合組,稱爲聚合組ID(Link Aggregation Group ID,LAG ID)。如果一個聚合組中包含多個鏈路,那麼LAG ID中,本端端口ID和對端端口ID爲0,相當於只用四元組就可以刻畫包含多個鏈路的聚合組。
端口類型:
1.Selectet 和未選中:
參與流量轉發的端口稱爲Selected端口,否則稱爲Unselected端口
2.主端口(master端口)
處於Selected狀態且端口號最小的端口稱爲主端口(Master Port),可以形象的認爲,聚合組中的所有端口被匯聚到了主端口,主端口在邏輯上代表了整個聚合組,對於GVRP/GMRP 、STP/RSTP /MSTP等二層協議,都只從主端口發送,其他數據報文則在各個Selected端口間分擔。
3.補充:
由於Selected與Unselected端口在實際狀態下的選取受到硬件的影響,所以不同廠家產品的具體表現形式可能有差異
LACP綁定端口
判斷將一個端口綁定到Aggregator的關鍵依據是LAG ID,判斷方法是:
1.Aggregator的操作KEY和端口的操作KEY相同。
2.已經綁定到這個Aggregator的其他端口和這個端口有相同的鏈路LAG ID,即與Aggregator關聯的LAG ID必須和端口的LAG ID相同。
3.「LAG ID」則指的是聚合組ID( Link Aggregation Group ID),「聚合ID」則指的是Aggregator ID. (LAG ID就是指屬於同一個聚合中的所有port 包括selected 和Standby,對於手工和靜態比較好理解,就是指用戶所指定的所有port,對於動態匯聚,指所有port)
端口離開Aggregator
1.如果Actor端口在一定時間內(使用long timeout時是90s,使用short timeout是3秒)收不到Partner端口發送的LACP報文,就宣告自己處於超時狀態,如果在下一個short timeout時間(3秒)內還沒有收到Partner的報文,就會離開這個Aggregator。
2.如果從Partner端口收到的LACP報文,發現LAG ID發生了改變(系統ID或操作KEY發生了變化,系統ID改變說明連接到的對端設備發生了變化,操作KEY發生了變化可能是對端端口的屬性發生了變化),這時端口也會離開這個Aggregator。
3.還有一種導致端口離開Aggregator的情況:Actor端口本身的屬性發生了變化,設備通過動態操作KEY功能給它分配的操作KEY發生變化,導致和Aggregator的LAG ID不匹配,從而離開聚合組。
Active模式和Passive模式
1.Active模式下,端口正常週期性的發送LACP報文;
2.Passive模式下,端口平時不發送LACP報文,不過,一旦收到了對端的LACP報文,就會正常發送LACP報文了。
LACP其他功能:
LACP搶佔:
使能LACP搶佔功能後,聚合組會始終保持高優先級的接口作爲活動接口的狀態。以下兩種情況需要使能LACP搶佔功能:
Port1接口出現故障而後又恢復了正常。當接口Port1出現故障時被Port3所取代,如果在Eth-Trunk接口下未使能LACP搶佔功能,則故障恢復時Port1將處於備份狀態;如果使能了LACP搶佔功能,當Port1故障恢復時,由於接口優先級比Port3高,將重新成爲活動接口,Port3再次成爲備份接口。
如果希望Port3接口替換Port1、Port2中的一個接口成爲活動接口,可以使能了LACP搶佔功能,並配置Port3的接口LACP優先級較高。如果沒有使能LACP搶佔功能,即使將備份接口的優先級調整爲高於當前活動接口的優先級,系統也不會重新選擇活動接口。
LACP搶佔延時
搶佔延時是LACP搶佔發生時,處於備用狀態的鏈路將會等待一段時間後再切換到轉發狀態。配置搶佔延時是爲了避免由於某些鏈路狀態頻繁變化而導致Eth-Trunk數據傳輸不穩定的情況。
Port1由於鏈路故障切換爲非活動接口,此後該鏈路又恢復了正常。若系統使能了LACP搶佔功能並配置了搶佔延時,Port1重新切換回活動狀態就需要經過搶佔延時的時間。
活動鏈路與非活動鏈路切換
LACP模式鏈路聚合組兩端設備中任何一端檢測到以下事件,都會觸發聚合組的鏈路切換:
鏈路Down事件。
以太網OAM檢測到鏈路失效。
LACP協議發現鏈路故障。
接口不可用。
在使能了LACP搶佔功能的前提下,更改備份接口的優先級高於當前活動接口的優先級。
當滿足上述切換條件其中之一時,按照如下步驟進行切換:
關閉故障鏈路。
從N條備份鏈路中選擇優先級最高的鏈路接替活動鏈路中的故障鏈路。
優先級最高的備份鏈路轉爲活動狀態並轉發數據,完成切換。
鏈路聚合負載分擔模式:
在使用Eth-Trunk轉發數據時,由於聚合組兩端設備之間有多條物理鏈路,可能會產生同一數據流的第一個數據幀在一條物理鏈路上傳輸,而第二個數據幀在另外一條物理鏈路上傳輸的情況。這樣一來同一數據流的第二個數據幀就有可能比第一個數據幀先到達對端設備,從而產生接收數據包亂序的情況。
爲了避免這種情況的發生,Eth-Trunk採用逐流負載分擔的機制,把數據幀中的地址通過HASH算法生成HASH-KEY值,然後根據這個數值在Eth-Trunk轉發表中尋找對應的出接口,不同的MAC或IP地址HASH得出的HASH-KEY值不同,從而出接口也就不同,這樣既保證了同一數據流的幀在同一條物理鏈路轉發,又實現了流量在聚合組內各物理鏈路上的負載分擔。逐流負載分擔能保證包的順序,但不能保證帶寬利用率。
轉發原理:
Eth-Trunk位於MAC與LLC子層之間,屬於數據鏈路層。
Eth-Trunk模塊內部維護一張轉發表,這張表由以下兩項組成。
HASH-KEY值
HASH-KEY值是根據數據包的MAC地址或IP地址等,經HASH算法計算得出。
接口號
Eth-Trunk轉發表表項分佈和設備每個Eth-Trunk支持加入的成員接口數量相關,不同的HASH-KEY值對應不同的出接口。
Eth-Trunk模塊根據轉發錶轉發數據幀的過程如下:
Eth-Trunk模塊從MAC子層接收到一個數據幀後,根據負載分擔方式提取數據幀的源MAC地址/IP地址或目的MAC地址/IP地址。
根據HASH算法進行計算,得到HASH-KEY值。
Eth-Trunk模塊根據HASH-KEY值在轉發表中查找對應的接口,把數據幀從該接口發送出去。
用戶可以根據流量模型設置不同的負載分擔方式,流量中某個參數變化越頻繁,選擇對應負載分擔方式的流量就越均衡。例如,在網絡中,如果報文的IP地址變化較頻繁,那麼選擇基於目的IP地址、源IP地址或源IP和目的IP地址的負載分擔模式更有利於流量在各物理鏈路間合理的負載分擔;如果報文的MAC地址變化較頻繁,IP地址比較固定,那麼選擇基於目的MAC地址、源MAC地址或源MAC和目的MAC地址的負載分擔模式更有利於流量在各物理鏈路間合理的負載分擔。
配置負載分擔方式時,請注意:
負載分擔方式只在流量的出接口上生效,如果發現各入接口的流量不均衡,請修改上行出接口的負載分擔方式。
儘量將數據流通過負載分擔在所有活動鏈路上傳輸,避免數據流僅在一條鏈路上傳輸,造成流量擁堵,影響業務正常運行。
例如,數據報文的目的MAC和IP地址只有一個,則應選擇根據報文的源MAC和IP地址進行負載分擔,如果選擇根據報文的目的MAC和IP地址進行負載分擔則會造成流量只在一條鏈路上傳輸,造成流量擁堵。
參考資料:華爲支持官網
LACP技術白皮書