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

基于視覺(jué)導(dǎo)航AGV的多路徑快速檢測(cè)算法

多路徑纏繞模型及其容錯(cuò)路由機(jī)制
數(shù)據(jù)中心網(wǎng)絡(luò)中的流量均衡

融合網(wǎng)絡(luò)的多路徑Bandit優(yōu)化算法

基于SDN的云計(jì)算數(shù)據(jù)中心網(wǎng)絡(luò)將是未來(lái)云數(shù)據(jù)中心網(wǎng)絡(luò)的發(fā)展趨勢(shì)

多路徑解決方案介紹及優(yōu)勢(shì)說(shuō)明
多路徑和iSCSI SAN存儲(chǔ)技術(shù)介紹

評(píng)論