季如春 上海鐵路局信息技術(shù)所
伴隨著鐵路信息化發(fā)展的步伐,許多鐵路信息系統(tǒng)實(shí)現(xiàn)了集中整合,體現(xiàn)出管理效率提高、投資成本降低的優(yōu)勢,但同時因?yàn)殍F路單位覆蓋地域廣、員工數(shù)量多,對鐵路信息系統(tǒng)的網(wǎng)絡(luò)、服務(wù)器的性能也提出了更高的要求,尤其是出現(xiàn)鐵路信息系統(tǒng)的訪問量和數(shù)據(jù)流量迅速增長,使得單一的服務(wù)器設(shè)備無法獨(dú)自承擔(dān)起高強(qiáng)度的計(jì)算和不斷增長的業(yè)務(wù)處理需求,因此利用負(fù)載均衡技術(shù)擴(kuò)展服務(wù)器的吞吐量,加強(qiáng)服務(wù)器的數(shù)據(jù)處理能力,成為解決問題的有效途徑。在負(fù)載均衡的設(shè)計(jì)與實(shí)現(xiàn)過程中,有許多關(guān)鍵環(huán)節(jié)需要把握。
負(fù)載均衡是隨著網(wǎng)絡(luò)業(yè)務(wù)量的不斷增長而發(fā)展起來的技術(shù),通過制定合理的網(wǎng)絡(luò)架構(gòu)和合適的均衡策略,能實(shí)現(xiàn)能讓多臺服務(wù)器或多條鏈路共同承擔(dān)一些高強(qiáng)度的計(jì)算或應(yīng)用服務(wù),從而以較低成本消除網(wǎng)絡(luò)應(yīng)用的瓶頸,提高網(wǎng)絡(luò)訪問的靈活性和可靠性。
鐵路信息系統(tǒng)依靠大幅提高單臺服務(wù)器的處理能力,已經(jīng)無法滿足業(yè)務(wù)訪問需求的處理,因而廣泛引入負(fù)載均衡技術(shù),通過增加服務(wù)器的數(shù)量,將大量的并發(fā)訪問或數(shù)據(jù)流量分擔(dān)到多臺服務(wù)器,實(shí)現(xiàn)不同服務(wù)器之間合理的業(yè)務(wù)處理需求分配,充分發(fā)揮每臺服務(wù)器的處理能力,不僅消除了單臺服務(wù)器存在單點(diǎn)失效的隱患,同時提高了系統(tǒng)的可擴(kuò)展性,當(dāng)現(xiàn)有服務(wù)器群的處理能力不能滿足使用需求時,只需要簡單地增加一臺或多臺新的服務(wù)器到服務(wù)器群中,即可提升服務(wù)器群的處理能力,不需要對網(wǎng)絡(luò)結(jié)構(gòu)做任何改變,也不會對信息系統(tǒng)的正常運(yùn)行產(chǎn)生影響。
在采用負(fù)載均衡技術(shù)時,需要根據(jù)應(yīng)用系統(tǒng)的訪問流程和特點(diǎn),設(shè)計(jì)合理的負(fù)載均衡架構(gòu)、選擇合適的參數(shù),才能達(dá)到最佳的使用效果。
負(fù)載均衡有多種使用方式,并且針對不同的應(yīng)用業(yè)務(wù)需求,對應(yīng)OSI參考模型的第二、三、四、七層都有相應(yīng)的負(fù)載均衡策略。根據(jù)鐵路信息系統(tǒng)的特點(diǎn),通常使用應(yīng)用的負(fù)載均衡和鏈路的負(fù)載均衡,這里主要研究應(yīng)用負(fù)載均衡技術(shù)的設(shè)計(jì)和實(shí)現(xiàn)。
負(fù)載均衡設(shè)備對內(nèi)指向一個服務(wù)器群,對外則構(gòu)成一臺虛擬服務(wù)器,通過虛擬服務(wù)器對外提供服務(wù)。當(dāng)外部的一個訪問虛擬服務(wù)器的請求被送達(dá)負(fù)載均衡設(shè)備后,負(fù)載均衡設(shè)備根據(jù)預(yù)先設(shè)定好的負(fù)載均衡算法從服務(wù)器群中挑選一臺服務(wù)器來響應(yīng)訪問請求,并將訪問請求包的目的地址與端口轉(zhuǎn)換成該服務(wù)器的網(wǎng)卡物理地址和設(shè)定的服務(wù)端口,在服務(wù)器處理訪問請求并作出回應(yīng)時,回應(yīng)的包可以直接返回給外部訪問者,也可以通過負(fù)載均衡設(shè)備返回給外部訪問者,從而實(shí)現(xiàn)一次完整的訪問過程。
鐵路信息系統(tǒng)使用的都是本地負(fù)載均衡結(jié)構(gòu),即對本地服務(wù)器做負(fù)載均衡,以解決業(yè)務(wù)訪問量過大,服務(wù)器負(fù)荷過重的問題,典型的拓?fù)浼軜?gòu)有兩種,直連方式和旁掛方式。
2.2.1 直連方式
采用直連方式,負(fù)載均衡設(shè)備對外虛擬服務(wù)器IP地址與內(nèi)部應(yīng)用服務(wù)器IP地址為不同網(wǎng)段的地址,外部訪問無法直接訪問到應(yīng)用服務(wù)器,如圖1所示。
采用直連方式的負(fù)載均衡,其優(yōu)點(diǎn)在于對內(nèi)部應(yīng)用服務(wù)器起到了一定程度的安全保護(hù)作用,增強(qiáng)對應(yīng)用訪問的控制,而且減少了對外服務(wù)IP地址的使用量。
2.2.2 旁掛方式
旁掛方式分為單臂模式和雙臂模式兩種。采用單臂旁掛方式,負(fù)載均衡設(shè)備對外虛擬服務(wù)器IP地址與應(yīng)用服務(wù)器IP地址為同一網(wǎng)段的地址,外部訪問無需通過負(fù)載均衡設(shè)備也可以直接訪問到應(yīng)用服務(wù)器,如圖2所示。采用雙臂旁掛方式,負(fù)載均衡設(shè)備對外虛擬服務(wù)器IP地址與內(nèi)部應(yīng)用服務(wù)器IP地址仍為不同網(wǎng)段的地址,外部訪問無法直接訪問到應(yīng)用服務(wù)器,在鐵路信息系統(tǒng)中應(yīng)用較少。
圖1 直連方式拓?fù)浣Y(jié)構(gòu)
圖2 單臂旁掛方式拓?fù)浣Y(jié)構(gòu)
采用單臂旁掛方式的負(fù)載均衡,其優(yōu)點(diǎn)在于可以旁路不需要負(fù)載均衡的流量;解決了負(fù)載均衡端口數(shù)量不足而影響接入擴(kuò)展性的問題;便于維護(hù),可遠(yuǎn)程登錄應(yīng)用服務(wù)器直接進(jìn)行維護(hù);在負(fù)載均衡設(shè)備發(fā)生故障時,易于采取直接訪問應(yīng)用服務(wù)器的應(yīng)急恢復(fù)措施;故障的判斷定位簡便。
2.2.3 拓?fù)浼軜?gòu)的設(shè)計(jì)
由于鐵路信息系統(tǒng)的特殊性和復(fù)雜性,在設(shè)計(jì)負(fù)載均衡拓?fù)浼軜?gòu)時需要根據(jù)應(yīng)用系統(tǒng)的訪問流程,結(jié)合兩種拓?fù)浼軜?gòu)的優(yōu)勢進(jìn)行選擇和設(shè)計(jì)。
如圖3所示,假定選擇直連方式的負(fù)載均衡拓?fù)浼軜?gòu),負(fù)載均衡設(shè)備對內(nèi)指向兩組應(yīng)用服務(wù)器,分別處理不同的業(yè)務(wù)訪問請求。當(dāng)一個外部訪問請求通過三層交換機(jī)送達(dá)負(fù)載均衡設(shè)備后,負(fù)載均衡設(shè)備選擇一臺應(yīng)用服務(wù)器(假定為應(yīng)用服務(wù)器Server 2)來響應(yīng)訪問請求,將訪問請求包的目的地址與端口轉(zhuǎn)換成應(yīng)用服務(wù)器Server 2的網(wǎng)卡物理地址和設(shè)定的服務(wù)端口,然后將數(shù)據(jù)包發(fā)給應(yīng)用服務(wù)器Server 2。應(yīng)用服務(wù)器Server 2收到訪問請求后,暫時擱置該訪問請求,而向數(shù)據(jù)庫服務(wù)器發(fā)起一個新的查詢請求,此時負(fù)載均衡設(shè)備的作用僅僅是轉(zhuǎn)發(fā)查詢請求包。由于數(shù)據(jù)庫服務(wù)器和應(yīng)用服務(wù)器Server 2的IP地址不在同一網(wǎng)段內(nèi),因此當(dāng)數(shù)據(jù)庫服務(wù)器執(zhí)行完查詢請求后只能將回應(yīng)包發(fā)送到網(wǎng)關(guān)設(shè)備即三層交換機(jī),然后根據(jù)三層交換機(jī)上的路由信息再將回應(yīng)包通過負(fù)載均衡設(shè)備轉(zhuǎn)發(fā)給應(yīng)用服務(wù)器Server 2,應(yīng)用服務(wù)器Server 2結(jié)合數(shù)據(jù)庫服務(wù)器發(fā)來的信息,再對外部訪問請求作出回應(yīng),回應(yīng)包的源地址與端口由負(fù)載均衡設(shè)備負(fù)責(zé)轉(zhuǎn)換回虛擬服務(wù)器的地址與端口,并返回給外部訪問者。
圖3 拓?fù)浼軜?gòu)的設(shè)計(jì)
在這個訪問過程中,負(fù)載均衡設(shè)備對于應(yīng)用服務(wù)器Server 2與數(shù)據(jù)庫服務(wù)器之間的通信僅僅起到一個數(shù)據(jù)包的轉(zhuǎn)發(fā)作用,并且訪問內(nèi)部應(yīng)用服務(wù)器的路由信息必須要對外開放,才能保證數(shù)據(jù)庫服務(wù)器的回應(yīng)包能發(fā)送回應(yīng)用服務(wù)器Server 2。當(dāng)負(fù)載均衡設(shè)備發(fā)生故障時,外部訪問請求無法改為直接訪問應(yīng)用服務(wù)器,同時負(fù)載均衡設(shè)備也不能在應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器之間進(jìn)行有效的數(shù)據(jù)轉(zhuǎn)發(fā),采用雙臂旁掛方式也會存在同樣的問題,所以對于這樣的應(yīng)用系統(tǒng)訪問流程,采用單臂旁掛方式的負(fù)載均衡拓?fù)浼軜?gòu)要更為合適。
圖3拓?fù)浼軜?gòu)的設(shè)計(jì),盡可能多地應(yīng)用了端口匯聚(channel)設(shè)計(jì),將兩個設(shè)備間多條FE或GE物理鏈路捆綁在一起組成一條設(shè)備間的邏輯鏈路,從而達(dá)到增加帶寬,提供冗余的目的。當(dāng)邏輯鏈路中一條物理鏈路Link failed時,其他物理鏈路照常工作,數(shù)據(jù)流量將會在其余Link的物理鏈路上繼續(xù)進(jìn)行傳輸。使用端口匯聚時需要注意設(shè)備協(xié)商和匹配的方式即可。
同時,設(shè)計(jì)拓?fù)浼軜?gòu)時應(yīng)充分利用交換設(shè)備自帶的生成樹算法,盡可能設(shè)計(jì)成環(huán)形拓?fù)浼軜?gòu)。不必?fù)?dān)心環(huán)形拓?fù)鋾a(chǎn)生廣播風(fēng)暴,因?yàn)榛谏蓸渌惴ǖ木W(wǎng)橋協(xié)議STP(Spanning Tree Protocol)會創(chuàng)建一個以某臺交換設(shè)備的某個端口為根的生成樹,所有網(wǎng)絡(luò)節(jié)點(diǎn)動態(tài)進(jìn)入轉(zhuǎn)發(fā)狀態(tài)或阻塞狀態(tài),從而達(dá)到避免環(huán)路的目的。當(dāng)拓?fù)渲械囊慌_設(shè)備發(fā)生故障時,拓?fù)浼軜?gòu)中的其他設(shè)備會自動進(jìn)行生成樹拓?fù)涞闹匦掠?jì)算,將部分阻塞狀態(tài)的端口轉(zhuǎn)變?yōu)檗D(zhuǎn)發(fā)狀態(tài),從而建立新的有效的數(shù)據(jù)傳輸路徑,避免設(shè)備故障時的人為干預(yù)處理,是非常實(shí)用的冗余設(shè)計(jì)。當(dāng)然,拓?fù)渲凶詣觿?chuàng)建的生成樹根節(jié)點(diǎn)經(jīng)常不是最佳的根節(jié)點(diǎn),特別是在拓?fù)浼軜?gòu)中存在多個環(huán)路時,最好選擇人為地設(shè)計(jì)指定生成樹根節(jié)點(diǎn)和設(shè)計(jì)指定某些網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)入阻塞狀態(tài)。
在拓?fù)浼軜?gòu)的設(shè)計(jì)中,還應(yīng)該避免負(fù)載均衡設(shè)備自身故障所帶來的單點(diǎn)失效問題,應(yīng)采用雙機(jī)熱備的設(shè)計(jì)和配置方式。需要注意的是,負(fù)載均衡設(shè)備、路由器等很多設(shè)備的雙機(jī)冗余都是采用VRRP技術(shù),對于網(wǎng)絡(luò)上的VRRP ID號必須要統(tǒng)一管理、統(tǒng)一分配,如果新增加一組設(shè)備的VRRP ID號與既有一組設(shè)備的VRRP ID號發(fā)生使用重疊沖突,將會對既有設(shè)備VR MAC地址的生成產(chǎn)生影響,從而導(dǎo)致既有系統(tǒng)的不可用。為此進(jìn)行了測試,在一臺三層交換機(jī)上設(shè)置兩個不同的網(wǎng)段,通過路由協(xié)議使兩個網(wǎng)段互通,將兩組負(fù)載均衡設(shè)備分別置于這兩個網(wǎng)段內(nèi),設(shè)置相同的VRRP ID號,測試結(jié)果表明雖然兩組負(fù)載均衡設(shè)備處于不同網(wǎng)段,但兩組負(fù)載均衡設(shè)備VR MAC地址的生成仍然會相互干擾。
鐵路的一些應(yīng)用系統(tǒng)要通過TCP傳輸數(shù)據(jù),確保數(shù)據(jù)傳輸?shù)耐暾?,在采用單臂旁掛方式的?fù)載均衡拓?fù)浼軜?gòu)時,必須設(shè)置proxy IP地址,負(fù)載均衡設(shè)備將外部訪問請求包發(fā)送給應(yīng)用服務(wù)器時,能夠把訪問請求包的源地址轉(zhuǎn)換成負(fù)載均衡設(shè)備的proxy IP地址,以保證應(yīng)用服務(wù)器的回應(yīng)包能返回給負(fù)載均衡設(shè)備。
對于雙機(jī)熱備的設(shè)計(jì)方式,需要為兩臺負(fù)載均衡設(shè)備設(shè)置不同的proxy IP地址。設(shè)置了相同的proxy IP地址,在單臺負(fù)載均衡設(shè)備正常工作時不會出現(xiàn)問題,當(dāng)主備負(fù)載均衡設(shè)備進(jìn)行切換時,相同的proxy IP地址所對應(yīng)的MAC地址發(fā)生變化,雖然通過人工刷新網(wǎng)絡(luò)上各設(shè)備的ARP表能夠解決問題,但也失去了設(shè)計(jì)雙機(jī)熱備的意義。
負(fù)載均衡的算法有輪循(Cyclic)、權(quán)重輪循(Weighted Cyclic)、最少連接數(shù)(Leastconns)、最少流量(Least Traffic)、最少用戶連接數(shù)(Least Number of Users)、最快響應(yīng)時間(Response Time Load Balancing)等多種,根據(jù)鐵路各種應(yīng)用系統(tǒng)的特點(diǎn),選擇合適的負(fù)載均衡算法,能夠使應(yīng)用服務(wù)器群中的應(yīng)用服務(wù)器很好的共同完成任務(wù),避免應(yīng)用服務(wù)器的負(fù)載分布不均,減少外部訪問等待響應(yīng)的時間。例如對于鐵路信息系統(tǒng)應(yīng)用服務(wù)沒有特定要求,服務(wù)器群中的所有應(yīng)用服務(wù)器處理能力大致相同,可以采用輪循的算法,即每一次來自外部的訪問請求都由負(fù)載均衡設(shè)備輪流分配給內(nèi)部的應(yīng)用服務(wù)器處理;對于有些應(yīng)用系統(tǒng)(如鐵路售票系統(tǒng))需要較長時間處理訪問請求,并且外部訪問請求與應(yīng)用服務(wù)器之間的連接時長差異較大,采用最少連接數(shù)的算法則能真正實(shí)現(xiàn)應(yīng)用服務(wù)器處理業(yè)務(wù)的均衡,但最少連接數(shù)均衡策略主要針對TCP業(yè)務(wù),屬于無連接的UDP業(yè)務(wù)則不適用。
應(yīng)用程序與負(fù)載均衡算法之間的相互配合機(jī)制是十分重要的。對于外部訪問請求異常終止,應(yīng)用服務(wù)器可能會自動關(guān)閉該連接進(jìn)程,而負(fù)載均衡設(shè)備如果沒有同步取消該連接,在使用最少連接數(shù)、最少用戶連接數(shù)等算法時則會導(dǎo)致服務(wù)器連接數(shù)的不均衡。
有些應(yīng)用系統(tǒng)需要考慮設(shè)定會話保持,因?yàn)檫@些應(yīng)用系統(tǒng)需要做到同一個Client的多個連接請求被發(fā)送到同一臺應(yīng)用服務(wù)器上,才能保證特定的會話數(shù)據(jù)能夠在連接時間內(nèi)保持,所以負(fù)載均衡設(shè)備在進(jìn)行外部訪問請求分配時,需要在“客戶IP會話保持”,“cookie會話保持”,“SSL ID會話保持”等多種會話保持方式中選擇合適的會話保持策略。
Aging Time的設(shè)置可以有效地清除異常終止的session連接,而時間長短的設(shè)定尤為關(guān)鍵,時間設(shè)定的過短,不能保證業(yè)務(wù)流程的完成,時間設(shè)定的過長,又不能到達(dá)及時清除的目的,因此需要緊密配合應(yīng)用業(yè)務(wù)進(jìn)行設(shè)定。
健康檢查有 Ping、HTTP Page、TCP Port、UDP Port等方式。作用在于監(jiān)視服務(wù)器在IP、TCP、UDP、應(yīng)用和內(nèi)容等協(xié)議層上的工作狀態(tài),當(dāng)應(yīng)用服務(wù)器群中的一臺應(yīng)用服務(wù)器發(fā)生故障時,負(fù)載均衡設(shè)備能及時檢測發(fā)現(xiàn),從而將外部訪問請求引向其他的應(yīng)用服務(wù)器,達(dá)到信息系統(tǒng)不間斷運(yùn)行的目的。
鐵路信息系統(tǒng)主要采用TCP Port的偵測方式,對相關(guān)端口檢查并完成三次握手,拆連接時向服務(wù)器發(fā)出Fin包。當(dāng)應(yīng)用服務(wù)器系統(tǒng)正常,應(yīng)用進(jìn)程出現(xiàn)問題時,采用TCP Port的偵測方式能夠最好地將問題反映出來。需要注意的是,要調(diào)整好負(fù)載均衡設(shè)備健康檢查的間隔和重試次數(shù),對外、對內(nèi)的所有端口都要進(jìn)行檢測,才能確保應(yīng)用業(yè)務(wù)的正常和連續(xù)性。有些鐵路信息系統(tǒng)還需要負(fù)載均衡設(shè)備與應(yīng)用服務(wù)器建立一個自定義的TCP Socket連接,并模擬工作站發(fā)送和接收字符,通過應(yīng)用服務(wù)器返回的值來判斷服務(wù)器系統(tǒng)和應(yīng)用程序的健康狀態(tài)。
鐵路信息系統(tǒng)應(yīng)用在不斷的發(fā)展和變化,因此需要負(fù)載均衡技術(shù)適應(yīng)鐵路應(yīng)用結(jié)構(gòu)變化的需求,利用負(fù)載均衡設(shè)備實(shí)現(xiàn)鏈路的負(fù)載均衡、實(shí)現(xiàn)網(wǎng)閘和防火墻的流量負(fù)載均衡以及不同負(fù)載均衡設(shè)備組之間的相互映射等方式正在逐步設(shè)計(jì)和使用,今后還將深入發(fā)掘負(fù)載均衡技術(shù)精髓,總結(jié)經(jīng)驗(yàn),更好地服務(wù)于鐵路信息化的發(fā)展。