技術(shù)盛宴 | 數(shù)據(jù)中心網(wǎng)絡(luò)等價多路徑(ECMP)技術(shù)應(yīng)用研究
目前數(shù)據(jù)中心網(wǎng)絡(luò)廣泛應(yīng)用的Fabric架構(gòu)中會應(yīng)用大量的ECMP(Equal-Cost Multipath Routing,簡寫ECMP),其優(yōu)點主要體現(xiàn)在可以提高網(wǎng)絡(luò)冗余性和可靠性,同時也提高了網(wǎng)絡(luò)資源利用率;大量的ECMP鏈路在特定場景下運行過程中會引發(fā)其他問題。例如,當某條ECMP鏈路斷開后,ECMP組內(nèi)所有鏈路流量都會被重新HASH,在有狀態(tài)的服務(wù)器區(qū)域(如LVS)中將導(dǎo)致雪崩現(xiàn)象,又或者會出現(xiàn)多級ECMP的HASH極化導(dǎo)致鏈路擁塞等。本文將結(jié)合ECMP運行原理針對以上問題進行分析,并探討如何優(yōu)化ECMP的運用。
等價多路徑路由
等價多路徑路由,即存在多條到達同一個目的地址的相等開銷的路徑。當設(shè)備支持等價路由時,發(fā)往該目的IP 或者目的網(wǎng)段的三層轉(zhuǎn)發(fā)流量就可以通過不同的路徑分擔(dān),實現(xiàn)網(wǎng)絡(luò)鏈路的負載均衡,并在鏈路出現(xiàn)故障時,實現(xiàn)快速切換。
ECMP實現(xiàn)流程:
圖例1:ECMP流程圖
步驟一:HASH因子的選擇
首先數(shù)據(jù)報文轉(zhuǎn)發(fā)查詢路由表,確認存在多個等價路由,再根據(jù)當前用戶配置的流量均衡算法,提取參與 HASH 計算的關(guān)鍵字段,即HASH因子。ECMP 流量均衡可選擇的 HASH 因子如下表:
圖表1:流量均衡模式對應(yīng)HASH因子表
注:因ECMP為三層轉(zhuǎn)發(fā),即使配置基于源MAC、目的MAC或者源目MAC作為HASH因子,系統(tǒng)也會默認選擇源IP作為HASH因子。另外,在選擇提取HASH因子為目的IP時ECMP會默認選擇源目IP作為HASH因子。
步驟二:HASH計算
基于步驟一提取的 HASH 因子,根據(jù) HASH 算法進行計算,得出相應(yīng)的 HASH lb-key(load-balance key)。 ECMP 流量均衡支持的 HASH 算法包括異或(XOR)、CRC、 CRC+擾碼等。
HASH算法有很多種,我們以XOR算法為例做出說明。XOR運算法則為兩個輸入比特位相同時為0,不同則為1。HASH因子不同,運算結(jié)果也不盡相同。
1. HASH因子為IP address source(SIP):
a) SIP XOR 0 ,得出一個32bit的數(shù)值a
b) 將數(shù)值a再進行高16bit和低16bit做XOR計算得出16bit數(shù)值b
c) 數(shù)值b的15~12bit與11~8bit再做XOR計算,得出4bit數(shù)值c
d) 數(shù)值c替換數(shù)值b的11~8bit,得出數(shù)值d
e) 數(shù)值d截取低位10bit即為lb key
2. HASH因子為SIP+DIP/DIP:
a) DIP XOR SIP ,得出一個32bit的數(shù)值a
b) 剩余運算步驟與SIP運算一致
3. HASH因子為SIP+DIP+SP+DP:
a) SIP XOR DIP得到32bit的數(shù)值a
b) 數(shù)值a的低16bit XOR SP 得到32bit的數(shù)值b
c) 數(shù)值b的低 16bit XOR DP 得到 32bit 的數(shù)值c
d) 數(shù)值c的高16bit XOR 低16bit得到16bit的數(shù)值d
e) 數(shù)值d的15~12bit XOR 11~8bit,得到4bit的數(shù)值e
f) 數(shù)值e替換數(shù)值d的11~8bit,得出數(shù)值f
g) 數(shù)值f截取低10bit,即為lb-key
步驟三:確認轉(zhuǎn)發(fā)下一跳
數(shù)據(jù)報文經(jīng)過路由查表后找到對應(yīng)ECMP 基值(base-ptr),根據(jù) HASH 因子通過 HASH 算法計算獲得 HASH lb-key 后,進行 ECMP 下一跳鏈路數(shù)(Member-count)求余計算,再與ECMP基值進行加法運算得出轉(zhuǎn)發(fā)下一跳index,即確定了下一跳轉(zhuǎn)發(fā)路由。
計算公式:Next-hop =(lb-key % Member-count)+ base-ptr
上述流程為ECMP常規(guī)轉(zhuǎn)發(fā)流程,但在特定網(wǎng)絡(luò)環(huán)境下運行過程中就會出現(xiàn)問題,接下來繼續(xù)分析數(shù)據(jù)中心網(wǎng)絡(luò)中ECMP遇到的2個常見問題。
問題一 單鏈路故障導(dǎo)致ECMP組所有數(shù)據(jù)流被重新HASH計算
當Leaf交換機發(fā)送6條數(shù)據(jù)流到LVS服務(wù)器,Leaf先進行HASH運算負載均衡到每一臺LVS服務(wù)器上,正常流量轉(zhuǎn)發(fā)如圖例2所示:
圖例2:ECMP轉(zhuǎn)發(fā)圖
當某臺LVS服務(wù)器網(wǎng)卡出現(xiàn)故障或者鏈路出現(xiàn)故障,Leaf交換機會將ECMP組內(nèi)數(shù)據(jù)流將重新HASH計算,再進行負載均衡到剩余有效鏈路上,進而導(dǎo)致TCP會話斷開,發(fā)生雪崩現(xiàn)象,例如一些支付類業(yè)務(wù),同一個用戶的一次支付過程會調(diào)用多個業(yè)務(wù)服務(wù),業(yè)務(wù)側(cè)要求一次支付的過程都落在同一個處理服務(wù)器上,當出現(xiàn)單條鏈路故障后不僅影響該鏈路所在LVS承載的用戶,同時還影響該ECMP組下其他LVS承載的用戶,如圖例3所示:
圖例3:故障后ECMP轉(zhuǎn)發(fā)圖
優(yōu)化方案:
為避免單臺LVS服務(wù)器故障或者單鏈路故障導(dǎo)致整個ECMP組內(nèi)流量全部被重新HASH,ECMP可采用彈性HASH算法來優(yōu)化。采用彈性HASH算法后,僅將故障鏈路的流量重新HASH到其他活躍鏈路上,而非故障鏈路上的數(shù)據(jù)流則無需改變下一跳。實現(xiàn)效果如圖例4所示:
圖例4:ECMP彈性HASH算法
彈性HASH具體實現(xiàn)原理:
圖例5:彈性HASH流程
在交換機上生成一張索引表(RH Flow Set Table),用于存放相關(guān)索引值對應(yīng)下一跳路由地址。數(shù)據(jù)報文經(jīng)過路由查表后找到對應(yīng)ECMP 基值,提取HASH因子進行HASH運算,在HASH Key與ECMP數(shù)量取余數(shù)時無論是否出現(xiàn)故障鏈路,均以最初數(shù)量進行取余運算,因此運算結(jié)果一致,非故障鏈路數(shù)據(jù)依然按照原有鏈路轉(zhuǎn)發(fā)。如下圖中,鏈路3故障后軟件CPU將及時更新RH flow table,將失效鏈路用正常鏈路均勻替換。
圖例6:彈性HASH索引表替換示意圖
問題二 HASH極化問題
如圖例7所示,在Leaf設(shè)備和Spine設(shè)備均采用上聯(lián)鏈路數(shù)為偶數(shù)且ECMP算法及HASH因子一致的情況下,數(shù)據(jù)流在Leaf設(shè)備上經(jīng)過一次HASH計算,將數(shù)據(jù)流負載分擔(dān)到兩臺Spine上,均衡后效果為數(shù)據(jù)流1、2、3轉(zhuǎn)發(fā)至Spine-1,數(shù)據(jù)流4、5、6轉(zhuǎn)發(fā)至Spine-2,Spine再進行HASH計算負載分擔(dān)到兩臺DCI核心上,因在Spine層采用的HASH算法與Leaf的HASH算法一致,最終Spine-1的數(shù)據(jù)流1、2、3均轉(zhuǎn)發(fā)至DCI-1上,未負載分擔(dān)到DCI-2上任何數(shù)據(jù)流,而Spine-2的數(shù)據(jù)流4、5、6均轉(zhuǎn)發(fā)至DCI-2上,未負載分擔(dān)到DCI-1上任何數(shù)據(jù)流,同理Leaf-2發(fā)送的數(shù)據(jù)流也是如此,進而產(chǎn)生HASH極化問題,導(dǎo)致SPINE和DCI之間鏈路有一條空閑,極大的浪費了網(wǎng)絡(luò)資源,甚至?xí)?dǎo)致流量擁塞。
圖例7:HASH極化
優(yōu)化方案:
- 同廠商Leaf設(shè)備和Spine設(shè)備均采用相同上聯(lián)鏈路數(shù)場景下,應(yīng)避免在相鄰的兩臺設(shè)備上使用相同的負載均衡算法;
- 設(shè)備在運行HASH計算時,除傳統(tǒng)的五元組外,可以增添擾動因子,避免HASH計算結(jié)果相同。
HASH擾動的計算過程中HASH因子仍然正常提取,再增加用戶自定義隨機擾動因子,經(jīng)過HASH算法運算時,不同交換機HASH計算結(jié)果就將不一致,以達到避免HASH極化現(xiàn)象的出現(xiàn)。
圖例8:HASH擾動計算過程
動態(tài)負載均衡技術(shù)實現(xiàn)
在數(shù)據(jù)中心網(wǎng)絡(luò)中,突發(fā)流量多,并且存在大象流和老鼠流并存現(xiàn)象,本文所描述的基于數(shù)據(jù)流五元組的HASH算法,并結(jié)合HASH擾動因子技術(shù)實現(xiàn)流量負載均衡,但無法實現(xiàn)大象流和老鼠流并存的網(wǎng)絡(luò)中多鏈路之間的流量負載均衡。
銳捷網(wǎng)絡(luò)新一代25G數(shù)據(jù)中心網(wǎng)絡(luò)解決方案中所采用的***芯片,已能夠支持DLB(Dynamic load balance,動態(tài)鏈路負載)特性,可基于流量負載狀態(tài)實現(xiàn)動態(tài)的HASH負載均衡。具體實現(xiàn)方法是交換機為每條進行負載均衡的數(shù)據(jù)流創(chuàng)建一個流表,基于流表記錄流量統(tǒng)計信息,根據(jù)流量統(tǒng)計信息動態(tài)調(diào)整鏈路負載均衡。
感謝您關(guān)注銳捷網(wǎng)絡(luò)技術(shù)干貨文章!現(xiàn)誠邀您參與有獎?wù){(diào)研,您寶貴的意見和建議將幫助我們在技術(shù)探索與分享上持續(xù)精進。
點擊下方鏈接參與調(diào)研:
http://survey.ruijie.com.cn/m/27674678.aspx