多途徑可實(shí)現(xiàn)負(fù)載均衡
實(shí)現(xiàn)負(fù)載均衡,是很多企業(yè)關(guān)注的問題。隨著IT業(yè)務(wù)的激增,這種均衡方案也越來越多的受到重視。那么,根據(jù)負(fù)載平衡技術(shù)而來的網(wǎng)站規(guī)劃方案成為企業(yè)眼中的精囊妙計(jì)。那么,現(xiàn)在就讓我們一起來看看如何將路由,路徑等問題用負(fù)載均衡的手段處理得當(dāng)。
ECMP
ScreenOS支持ECMP (Equal Cost Multi-Path /等值多路徑) 功能,即支持將流量在多條等cost值的路徑上進(jìn)行負(fù)載分擔(dān);
假如用戶有兩條鏈路接入互聯(lián)網(wǎng),則可設(shè)置兩條靜態(tài)默認(rèn)路由 (ScreenO中靜態(tài)路由cost值默認(rèn)都為1) 分別指向兩個(gè)不同的下一跳地址,并打開ECMP功能,同時(shí)指定需要負(fù)載均衡的鏈路條數(shù);另外可在防火墻連接兩條鏈路的接口上都打開NAT功能,這樣所有流量都會(huì)在兩條鏈路上進(jìn)行負(fù)載分擔(dān)并轉(zhuǎn)換成公網(wǎng)IP去往互聯(lián)網(wǎng);
Network -> Routing -> Virtual Router -> Edit
或通過命令行 ” set max-ecmp-routes 2 ” 來啟用ECMP功能,由于ScreenOS最多支持四條鏈路的負(fù)載均衡,因此還可使用” set max-ecmp-routes 3 ” 或” set max-ecmp-routes 4 ”。
由于防火墻是狀態(tài)檢測(cè)設(shè)備,因此流量會(huì)基于會(huì)話以輪詢的方式實(shí)現(xiàn)負(fù)載均衡;舉個(gè)例子,假如共有10000個(gè)會(huì)話,如果在兩條鏈路上打開ECMP功能的話,則其中約5000個(gè)會(huì)話從鏈路一出去,約5000個(gè)會(huì)話會(huì)從鏈路二出去;
ECMP功能的好處是配置簡(jiǎn)單,但其缺點(diǎn)也是顯而異見的,即它不能智能地依據(jù)路由遠(yuǎn)近去分配流量,而是絕對(duì)平均地以輪詢的方式分配所有會(huì)話到不同鏈路,這樣有可能導(dǎo)致某些流量不能從最佳路由出去;比如用戶同時(shí)租用了電信和網(wǎng)通的兩條鏈路,ECMP打開的后果可能會(huì)導(dǎo)致去往電信區(qū)域的數(shù)據(jù)從網(wǎng)通鏈路出去,而去往網(wǎng)通區(qū)域的數(shù)據(jù)從電信鏈路出去。因此ECMP功能最適用于租用同一個(gè)運(yùn)營(yíng)商若干條鏈路的用戶,或租用若干個(gè)互聯(lián)互通情況較好的運(yùn)營(yíng)商鏈路的用戶。
另外ECMP還有一個(gè)缺點(diǎn)是跟某些應(yīng)用不兼容;比如某些多連接的應(yīng)用,且該應(yīng)用還要求每個(gè)連接都來自同一個(gè)IP地址,而打開ECMP的情況下,很可能同一個(gè)用戶發(fā)起的兩個(gè)連接中的一個(gè)從鏈路一出去,第二個(gè)連接從鏈路兒出去,導(dǎo)致這些應(yīng)用運(yùn)行不正常,最常見的例子是工商銀行的網(wǎng)上銀行業(yè)務(wù),中國(guó)移動(dòng)網(wǎng)上營(yíng)業(yè)廳以及聯(lián)眾的網(wǎng)絡(luò)游戲系統(tǒng)。解決方案是打開ScreenOS的nat stick功能“set dip sticky”,即保證來自同一個(gè)源IP的不同會(huì)話始終被翻譯成同一個(gè)IP地址,這樣就可解決應(yīng)用兼容性問題;
基于目標(biāo)地址的路由
為了使流量能夠選擇最佳路由,最直接的手段就是通過基于目標(biāo)地址路由的選路方式,比如將所有去往某運(yùn)營(yíng)商域內(nèi)的流量手工的指到到通往該運(yùn)營(yíng)商的下一跳路由器上,再另外用一條默認(rèn)路由將其余流量指向到另外一條鏈路;如果是電信和網(wǎng)通的兩條鏈路我習(xí)慣將具體路由指向網(wǎng)通路由器,默認(rèn)路由指向電信路由器,原因是因?yàn)榫W(wǎng)通的路由條目較少而電信的資源較多;
比較常見的基于目標(biāo)地址路由來實(shí)現(xiàn)負(fù)載均衡的場(chǎng)合是大學(xué)的校園網(wǎng),由于大學(xué)校園網(wǎng)一般都有若干條鏈路接入internet,比如一條連接電信,一條連接網(wǎng)通,一條連接教育科研網(wǎng)(Cernet),而這三個(gè)網(wǎng)絡(luò)之間的互聯(lián)互通做得并不好,比如從電信鏈路出去訪問Cernet的資源,會(huì)發(fā)現(xiàn)延時(shí)很大,速度很慢。這時(shí)使用基于目標(biāo)地址的路由可以最大程度保證流量選擇最佳路由出去。
基于源地址的路由 (PBR)
實(shí)現(xiàn)流量復(fù)雜均衡還有一個(gè)手段就是采用源地址路由的方式。一般的三層轉(zhuǎn)發(fā)設(shè)備都是通過查詢路由表 (存放基于目標(biāo)地址的路由) 來實(shí)現(xiàn)路由選路,而源地址路由(PBR)方式提供了另外一個(gè)手段,即防火墻會(huì)先查詢某預(yù)先定義的特殊路由表(PBR 路由表)來進(jìn)行路由查詢,當(dāng)PBR路由表中沒有命中的路由條目時(shí)再去查詢默認(rèn)的路由表;也就是說,PBR路由表的優(yōu)先級(jí)比默認(rèn)路由表高;
而PBR路由表中存放的路由都不是按照目標(biāo)地址來進(jìn)行選路的,而是基于別的一些因素;比如源地址,源端口,目標(biāo)地址,目標(biāo)端口以及IP包頭的COS字段這5者的任意組合。因此用戶可以利用該特性按照內(nèi)網(wǎng)用戶的源地址屬性進(jìn)行選錄;
舉個(gè)例子,加入用戶租用了兩條鏈路,一條帶寬為2M,另一條帶寬為10M,則可把內(nèi)網(wǎng)的用戶劃分為12個(gè)網(wǎng)段,通過PBR將2個(gè)網(wǎng)段從2M鏈路送出去,另外10個(gè)網(wǎng)段從10M鏈路送出去以實(shí)現(xiàn)靜態(tài)的負(fù)載均衡;
入方向的負(fù)載均衡
前面講的三種方式其實(shí)都是出方向的負(fù)載均衡,即連接由內(nèi)向外發(fā)起,適合大多數(shù)企業(yè)的環(huán)境;但可能有的用戶,比如提供互聯(lián)網(wǎng)服務(wù)的企業(yè),需要同時(shí)實(shí)現(xiàn)入方向的負(fù)載均衡,即要求當(dāng)互聯(lián)網(wǎng)用戶發(fā)起請(qǐng)求內(nèi)網(wǎng)的服務(wù)器數(shù)據(jù)的連接時(shí),選擇就近的鏈路接入;
熟悉運(yùn)營(yíng)商路由策略的人都了解,每個(gè)運(yùn)營(yíng)商都只發(fā)布自己的域內(nèi)路由;因此當(dāng)用戶連接的目標(biāo)地址屬于運(yùn)營(yíng)商A的地址范圍的時(shí)候,該連接一定會(huì)進(jìn)入運(yùn)營(yíng)商A的路由域并傳輸?shù)竭_(dá)最終目的地址。
因此對(duì)于入方向的流量,其實(shí)并沒有什么好的實(shí)現(xiàn)負(fù)載均衡手段,除非你有自己的獨(dú)立于運(yùn)營(yíng)商的地址范圍(自己的AS域)并通過BGP路由協(xié)議將自己的地址通告給所有的peer運(yùn)管商,但這種條件很難達(dá)成。
幸好互聯(lián)網(wǎng)的尋址系統(tǒng)還包括有一個(gè)DNS協(xié)議,如果DNS服務(wù)器能夠?qū)⒛撤?wù)器的域名解析成若干個(gè)分別對(duì)應(yīng)不同運(yùn)營(yíng)商的地址,則連接就可以在連接這些運(yùn)營(yíng)商的鏈路上平均分?jǐn)傄詫?shí)現(xiàn)負(fù)載均衡;這個(gè)功能實(shí)現(xiàn)起來很簡(jiǎn)單,只需在DNS服務(wù)器上添加多條A記錄即可(www.163.com就是這么做的);但由于DNS服務(wù)器不會(huì)檢查鏈路故障,因此當(dāng)某條鏈路斷掉后,DNS服務(wù)器依然會(huì)將域名隨機(jī)的解析到該鏈路所屬運(yùn)營(yíng)商的地址上,因此可能導(dǎo)致這部分流量服務(wù)不可用;
商業(yè)化的負(fù)載均衡設(shè)備(比如F5的Linkcontroller和Radware的LinkProof)都內(nèi)置一個(gè)小DNS服務(wù)器,該DNS服務(wù)器可監(jiān)控鏈路狀態(tài)的變化,當(dāng)發(fā)現(xiàn)某條鏈路故障時(shí),就不會(huì)將域名解析到該鏈路所屬運(yùn)營(yíng)商的地址,以實(shí)現(xiàn)服務(wù)的高可用性。當(dāng)然,這類設(shè)備的價(jià)格要比防火墻貴很多很多。