等價多路徑路由,即存在多條到達同一個目的地址的相等開銷的路徑。當設備支持等價路由時,發往該目的IP 或者目的網段的三層轉發流量就可以通過不同的路徑分擔,實現網絡鏈路的負載均衡,並在鏈路出現故障時,實現快速切換。
ECMP流程圖
目前資料中心網路(Data Center)廣泛應用的Fabric架構中會應用大量的ECMP,其優點主要體現在可以提高網路冗餘性和可靠性,同時也提高了網路資源利用率;大量的ECMP鏈路在特定場景下執行過程中會引發其他問題。例如,當某條ECMP鏈路斷開後,ECMP組內所有鏈路流量都會被重新HASH,在有狀態的伺服器區域(如LVS)中將導致雪崩現象,又或者會出現多級ECMP的HASH極化導致鏈路擁塞等。
首先數據報文轉發查詢路由表,確認存在多個等價路由,再根據當前用戶配置的流量均衡算法,提取參與 HASH 計算的關鍵字段,即HASH因子。ECMP 流量均衡可選擇的 HASH 因子如下表:
基於步驟一提取的 HASH 因子,根據 HASH 演算法進行計算,得出相應的 HASH lb-key(load-balance key)。 ECMP 流量均衡支援的 HASH 演算法包括異或(XOR)、CRC、 CRC+擾碼等。
HASH演算法有很多種,我們以XOR演算法為例做出說明。 XOR運演算法則為兩個輸入位元位相同時為0,不同則為1。 HASH因子不同,運算結果也不盡相同。
資料報文經過路由查表後找到對應ECMP 基值(base-ptr),根據 HASH 因子通過 HASH 演算法計算獲得 HASH lb-key 後,進行 ECMP 下一跳鏈路數(Member-count)求餘計算,再與ECMP基值進行加法運算得出轉發下一跳index,即確定了下一跳轉發路由。
上述流程為ECMP常規轉發流程,但在特定網路環境下執行過程中就會出現問題,接下來繼續分析資料中心網路中ECMP遇到的2個常見問題。
當Leaf交換機發送6條資料流到LVS伺服器(Linux Virtual Server),Leaf先進行HASH運算負載均衡到每一臺LVS伺服器上,正常流量轉發如圖所示:
當某臺LVS伺服器網絡卡出現故障或者鏈路出現故障,Leaf交換機會將ECMP組內資料流將重新HASH計算,再進行負載均衡到剩餘有效鏈路上,進而導致TCP會話斷開,發生雪崩現象,例如一些支付類業務,同一個使用者的一次支付過程會呼叫多個業務服務,業務側要求一次支付的過程都落在同一個處理伺服器上,當出現單條鏈路故障後不僅影響該鏈路所在LVS承載的使用者,同時還影響該ECMP組下其他LVS承載的使用者,如圖例所示:
在Leaf裝置和Spine裝置均採用上聯鏈路數為偶數且ECMP演算法及HASH因子一致的情況下,資料流在Leaf裝置上經過一次HASH計算,將資料流負載分擔到兩臺Spine上,均衡後效果為資料流1、2、3轉發至Spine-1,資料流4、5、6轉發至Spine-2,Spine再進行HASH計算負載分擔到兩臺DCI核心上,因在Spine層採用的HASH演算法與Leaf的HASH演算法一致,最終Spine-1的資料流1、2、3均轉發至DCI-1上,未負載分擔到DCI-2上任何資料流,而Spine-2的資料流4、5、6均轉發至DCI-2上,未負載分擔到DCI-1上任何資料流,同理Leaf-2傳送的資料流也是如此,進而產生HASH極化問題,導致SPINE和DCI之間鏈路有一條空閒,極大的浪費了網路資源,甚至會導致流量擁塞。
在資料中心網路中,突發流量多,並且存在大象流和老鼠流並存現象,本文所描述的基於資料流五元組的HASH演算法,並結合HASH擾動因子技術實現流量負載均衡,但無法實現大象流和老鼠流並存的網路中多鏈路之間的流量負載均衡。