張文盛
(安徽廣播電視大學(xué) 遠(yuǎn)程教育技術(shù)與圖文信息中心,安徽 合肥 230022)
高可用性是集群系統(tǒng)研究的一個(gè)熱點(diǎn),通過引入冗余設(shè)計(jì),使得系統(tǒng)能夠不間斷對外提供服務(wù),這對于重要的企業(yè)應(yīng)用至關(guān)重要[1].智能雙IP雙線服務(wù)比單線服務(wù)具有更好的帶寬和性能,是目前較為流行的系統(tǒng)架構(gòu),普遍應(yīng)用于各中小型企業(yè)[2].
智能雙IP雙線服務(wù)的工作原理如圖1所示.圖1中服務(wù)雙線接入兩個(gè)ISP(例如移動(dòng)和電信),每條鏈路分別配置ISP提供的IP(例如移動(dòng)IP和電信IP);用戶使用域名訪問服務(wù)時(shí),智能DNS服務(wù)器根據(jù)用戶IP所屬的ISP返回對應(yīng)的服務(wù)IP(例如移動(dòng)用戶返回移動(dòng)IP,其他用戶返回電信IP)[3-4];用戶向該IP發(fā)送的請求數(shù)據(jù)包經(jīng)相應(yīng)鏈路到達(dá)負(fù)載均衡器(Load Balancer,LB);LB根據(jù)均衡策略和算法選擇真實(shí)服務(wù)器(Real Server,RS)[5-6],將請求數(shù)據(jù)包轉(zhuǎn)發(fā)給它;RS處理請求,發(fā)送應(yīng)答數(shù)據(jù)包到達(dá)LB;LB執(zhí)行源策略路由[7],將應(yīng)答數(shù)據(jù)包從源鏈路發(fā)送給用戶.
圖1 智能雙IP雙線服務(wù)工作原理Fig.1 Operation principle of the intelligent dual-IP dual-line service
智能雙IP雙線技術(shù)可明顯減少跨ISP訪問,實(shí)現(xiàn)就近獲取服務(wù),極大提高用戶體驗(yàn)[8].此外智能雙IP雙線服務(wù)在一條鏈路發(fā)生故障的情況下,另一條鏈路下的用戶不受影響,比單鏈路可靠性有所提高[9].但是智能雙IP雙線服務(wù)還存在單點(diǎn)故障,在一條鏈路意外中斷的情況下,將導(dǎo)致部分用戶不能訪問服務(wù),對業(yè)務(wù)造成很大損失[10].針對這一缺點(diǎn),提出一種基于地址重寫的智能雙IP雙線服務(wù)架構(gòu),該架構(gòu)利用鏈路冗余,在一條鏈路發(fā)生故障時(shí),將流量轉(zhuǎn)移到另外一條鏈路,從而實(shí)現(xiàn)不間斷服務(wù),提高服務(wù)可靠性.
針對雙線服務(wù)的高可用性研究,目前成熟的技術(shù)有光線路自動(dòng)切換保護(hù)(Optical Line Auto-Switching Protection,OLP)[11]和邊界網(wǎng)關(guān)協(xié)議(Border Gateway Protocol,BGP)雙線[12].
OLP,又名雙路由保護(hù),是一種物理層的保護(hù)技術(shù)[13].OLP是指當(dāng)光傳輸線路上光纖意外折斷或損耗變大導(dǎo)致通訊質(zhì)量下降或通訊中斷時(shí),光線路自動(dòng)切換保護(hù)設(shè)備實(shí)時(shí)檢測,發(fā)出警告信息,并能夠自動(dòng)地將光傳輸線路由主線路切換至備用線路,使通信立即恢復(fù),從而使傳輸系統(tǒng)的故障時(shí)間降至最小,保證光傳輸系統(tǒng)的可靠性[14].OLP的最大缺點(diǎn)是需要布設(shè)第二條光纜,成本較高,不適合大面積使用[15].
BGP雙線技術(shù)是指采用BGP路由器接入兩個(gè)自治系統(tǒng)(Autonomous System,AS)[16],通過BGP協(xié)議選擇訪問服務(wù)的最佳路徑.BGP雙線技術(shù)的缺點(diǎn)是BGP路由器十分昂貴,同時(shí)要申請AS號[17].目前只有ISP才能利用這種技術(shù),建立BGP雙線機(jī)房,提供托管和租用服務(wù)[18].
OLP和BGP都具有很好的鏈路可用性,同時(shí)代價(jià)都很大,不適合中小型企業(yè)使用.智能雙IP雙線服務(wù)有線路冗余設(shè)計(jì),與OLP、BGP相比,拓?fù)浣Y(jié)構(gòu)有自己的特點(diǎn).目前,利用這種線路冗余實(shí)現(xiàn)高可用性的相關(guān)的研究還不多.本文設(shè)計(jì)鏈路狀態(tài)監(jiān)控協(xié)議,對IP協(xié)議進(jìn)行改造,在一條鏈路發(fā)生故障時(shí)執(zhí)行地址重寫,提高智能雙IP雙線服務(wù)的可用性.
基于地址重寫的智能雙IP雙線服務(wù)系統(tǒng)工作原理如圖2所示.
圖2 基于地址重寫的智能雙IP雙線服務(wù)系統(tǒng)工作原理Fig.2 Operation principle of address-rewriting-based intelligent dual-IP dual-line service
圖2中,路由器B、路由器C和負(fù)載均衡D部署了狀態(tài)監(jiān)測模塊,BD之間的鏈路發(fā)生故障時(shí),狀態(tài)檢測模塊使系統(tǒng)進(jìn)入地址重寫模式,此時(shí)用戶A訪問D的流量路徑如下:
(1)用戶A的訪問數(shù)據(jù)包到達(dá)路由器B,數(shù)據(jù)包目的地址是IP1.
(2)路由器B將IP1存入IP選項(xiàng)字段(類型為目的地址重寫),并重寫數(shù)據(jù)包的目的地址為IP2,然后將重寫后的數(shù)據(jù)包發(fā)給路由器C.
(3)路由器C將數(shù)據(jù)包發(fā)給負(fù)載均衡D.負(fù)載均衡D發(fā)現(xiàn)數(shù)據(jù)包含類型為目的地址重寫的IP選項(xiàng),還原數(shù)據(jù)包目的地址為IP1,完成遞交RS的工作.
(4)負(fù)載均衡D接收RS的應(yīng)答數(shù)據(jù)包,數(shù)據(jù)包源地址是IP1.負(fù)載均衡D將IP1存入IP選項(xiàng)字段(類型為源地址重寫),并重寫源地址為IP2,然后將重寫后的數(shù)據(jù)包發(fā)給路由器C.
(5)路由器C解析IP選項(xiàng)字段,將數(shù)據(jù)包源地址重寫為IP1,發(fā)給用戶A.
基于地址重寫的智能雙IP雙線服務(wù)系統(tǒng)結(jié)構(gòu)如圖3所示.
圖3 基于地址重寫的智能雙IP雙線服務(wù)系統(tǒng)結(jié)構(gòu)Fig.3 System architecture of address-rewriting-based intelligent dual-IP dual-line service
圖3中,節(jié)點(diǎn)可以是路由器,也可以是負(fù)載均衡設(shè)備.每個(gè)節(jié)點(diǎn)除了角色不同外,擁有相同的系統(tǒng)結(jié)構(gòu).該系統(tǒng)結(jié)構(gòu)包括兩個(gè)模塊:狀態(tài)監(jiān)控模塊和地址重寫模塊.狀態(tài)監(jiān)控模塊運(yùn)行在用戶空間;地址重寫模塊建立在Netfilter框架[19]上,運(yùn)行在內(nèi)核空間.狀態(tài)監(jiān)控模塊和其他節(jié)點(diǎn)的狀態(tài)監(jiān)控模塊通訊,交換彼此維護(hù)的狀態(tài)信息.狀態(tài)監(jiān)控模塊一旦發(fā)現(xiàn)鏈路斷開,立即通知地址重寫模塊開始工作;地址重寫模塊對發(fā)往該鏈路的數(shù)據(jù)包進(jìn)行重寫,使之重定向到另外一條鏈路.
為了進(jìn)一步區(qū)分發(fā)生重寫時(shí)兩個(gè)路由器的角色,定義連接故障鏈路的路由器為重寫由器,另外一個(gè)路由器為中轉(zhuǎn)路由器.
鏈路兩端節(jié)點(diǎn)不斷探測彼此和交換信息,確定鏈路狀態(tài).定義一次探測事務(wù)如下:節(jié)點(diǎn)以定時(shí)間隔T向?qū)Χ斯?jié)點(diǎn)發(fā)送狀態(tài)請求數(shù)據(jù)包;對端節(jié)點(diǎn)接收到狀態(tài)請求數(shù)據(jù)包后,經(jīng)過適當(dāng)處理,立即返回狀態(tài)應(yīng)答數(shù)據(jù)包給發(fā)送端;發(fā)送端解析應(yīng)答數(shù)據(jù)包,更新對端狀態(tài).狀態(tài)監(jiān)控模塊執(zhí)行探測事務(wù)確定其他節(jié)點(diǎn)狀態(tài),同時(shí)交換彼此維護(hù)的狀態(tài)信息,從而獲知系統(tǒng)狀態(tài),并決定本節(jié)點(diǎn)是否執(zhí)行地址重寫.節(jié)點(diǎn)的狀態(tài)轉(zhuǎn)換圖如圖4所示.
圖4 節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換圖Fig.4 Node state transition
節(jié)點(diǎn)狀態(tài)包括初始化(INIT)、同步(SYNC)、就緒(READY)、不可達(dá)(UNREACHABLE)和恢復(fù)(RECOVERY).節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換邏輯如下:
(1)節(jié)點(diǎn)啟動(dòng)時(shí)設(shè)置對端節(jié)點(diǎn)狀態(tài)為INIT.
(2)節(jié)點(diǎn)完成第1個(gè)探測事務(wù)時(shí),置對端節(jié)點(diǎn)狀態(tài)為SYNC.
(3)對端節(jié)點(diǎn)處于SYNC時(shí),只有連續(xù)完成N1個(gè)探測事務(wù)才能置對端節(jié)點(diǎn)為狀態(tài)為REDAY,防止鏈路故障率過高對系統(tǒng)運(yùn)行造成干擾.
(4)在對端節(jié)點(diǎn)處于READY時(shí),連續(xù)N2個(gè)探測事務(wù)失敗,置對端節(jié)點(diǎn)狀態(tài)為UNREACHABLE,此時(shí)節(jié)點(diǎn)需要根據(jù)其他信息判斷是否進(jìn)入地址重寫模式.
(5)在對端節(jié)點(diǎn)處于UNREACHABLE時(shí),完成1個(gè)探測事務(wù),則置對端節(jié)點(diǎn)狀態(tài)為RECOVERY.
(6)在對端節(jié)點(diǎn)處于RECOVERY時(shí),連續(xù)N1個(gè)探測事務(wù)成功,則置對端節(jié)點(diǎn)狀態(tài)為READY,此時(shí)節(jié)點(diǎn)需要根據(jù)其他信息判斷是否退出地址重寫模式.
在鏈路斷開的情況下,已建立的TCP連接會重傳數(shù)據(jù)[20],重傳失敗超過規(guī)定次數(shù)會關(guān)閉連接,因此N2*T的時(shí)間不能太長,要小于平均的重傳時(shí)間.
對端處于UNREACHABLE并不能確定是鏈路出問題(斷開)還是節(jié)點(diǎn)出問題(死機(jī)),因此不能據(jù)此切換運(yùn)行模式.為了解決這個(gè)問題,通過在探測事務(wù)中交換彼此維護(hù)的狀態(tài)信息進(jìn)行確認(rèn).每個(gè)節(jié)點(diǎn)維護(hù)一個(gè)狀態(tài)表格,其中包括本節(jié)點(diǎn)和其他兩個(gè)節(jié)點(diǎn)的狀態(tài).狀態(tài)表格結(jié)構(gòu)見表1.
狀態(tài)表中的每條記錄創(chuàng)建時(shí),固定值字段從配置文件中加載,初始值字段自動(dòng)初始化,對于可變值字段,本節(jié)點(diǎn)設(shè)置{直接狀態(tài):READY,間接狀態(tài):READY,運(yùn)行模式:正常},其他節(jié)點(diǎn)設(shè)置{直接狀態(tài):INIT,間接狀態(tài):INIT,運(yùn)行模式:正常}.
節(jié)點(diǎn)執(zhí)行探測事務(wù)時(shí),主要維護(hù)直接狀態(tài),同時(shí)交換該信息.通過狀態(tài)交換,可以獲知對端節(jié)點(diǎn)的間接狀態(tài).間接狀態(tài)是第三方節(jié)點(diǎn)探測到的對端節(jié)點(diǎn)的直接狀態(tài),表明經(jīng)第三方節(jié)點(diǎn)能否到達(dá)對端節(jié)點(diǎn).
表1 節(jié)點(diǎn)狀態(tài)表
Tab.1 Node states
字段名稱字段描述字段值屬性節(jié)點(diǎn)名稱給節(jié)點(diǎn)起的名字固定值節(jié)點(diǎn)類型可選值:路由器,負(fù)載均衡固定值節(jié)點(diǎn)地址IP地址固定值是否自己標(biāo)識是否是本節(jié)點(diǎn),是TRUE,否FALSE固定值直接狀態(tài)通過探測事務(wù)確定的節(jié)點(diǎn)狀態(tài)可變值間接狀態(tài)通過交換信息確定的節(jié)點(diǎn)狀態(tài)可變值運(yùn)行模式可選值:正常,目的地址重寫,源地址重寫可變值當(dāng)前事務(wù)ID事務(wù)需要,初始值0,以后每次加1初始值連續(xù)成功事務(wù)數(shù)用于節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換,初始值0初始值連續(xù)失敗事務(wù)數(shù)用于節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換,初始值0初始值總成功事務(wù)數(shù)用于統(tǒng)計(jì),初始值0初始值總失敗事務(wù)數(shù)用于統(tǒng)計(jì),初始值0初始值切換模式次數(shù)用于統(tǒng)計(jì),初始值0初始值最近切換模式時(shí)間用于統(tǒng)計(jì),初始值空初始值
有了所有節(jié)點(diǎn)的直接狀態(tài)和間接狀態(tài),狀態(tài)監(jiān)控模塊就可以決定是否切換運(yùn)行模式.對于路由器,只有負(fù)載均衡的直接狀態(tài)為UNREACHABLE而間接狀態(tài)為READY,其他節(jié)點(diǎn)的直接狀態(tài)均為READY時(shí),才可以進(jìn)入地址重寫模式;對于負(fù)載均衡,只有一個(gè)路由器的直接狀態(tài)為UNREACHABLE而間接狀態(tài)為READY,其他節(jié)點(diǎn)的直接狀態(tài)均為READY時(shí),才可以進(jìn)入地址重寫模式.
地址重寫類型包括源地址重寫和目的地址重寫.目的地址重寫發(fā)生在重寫路由器上,源地址重寫發(fā)生在負(fù)載均衡上.除了地址重寫外,還有地址還原,包括源地址還原和目的地址還原.目的地址還原發(fā)生在負(fù)載均衡上,源地址還原發(fā)生在中轉(zhuǎn)路由器上.為了完成重寫,定義新的IP選項(xiàng)見表2.
表2 地址重寫選項(xiàng)列表
Tab.2 Address rewriting options
重寫類型類型值長度數(shù)據(jù)源地址重寫1484IP地址目的地址重寫1494IP地址
根據(jù)角色的不同和收到的數(shù)據(jù)包不同,節(jié)點(diǎn)執(zhí)行如下動(dòng)作:
(1)源路由器收到發(fā)往故障鏈路的數(shù)據(jù)包,執(zhí)行源地址重寫.
(2)負(fù)載均衡收到包含源地址重寫選項(xiàng)的數(shù)據(jù)包,執(zhí)行目的地址還原.
(3)負(fù)載均衡發(fā)送到故障鏈路的數(shù)據(jù)包,執(zhí)行源地址重寫.
(4)中間路由器收到目的地址重寫選項(xiàng)的數(shù)據(jù)包,執(zhí)行源地址還原.
為了不影響路由和TCP連接的處理,根據(jù)動(dòng)作特點(diǎn),在Netfilter框架中嵌入重寫鉤子,完成處理任務(wù).重寫鉤子的位置如圖5所示.
圖5 重寫鉤子Fig.5 Rewriting hooks
圖5中,重寫鉤子掛接在PRE_ROUTING和LOCAL_OUT兩個(gè)位置.狀態(tài)監(jiān)控模塊在節(jié)點(diǎn)初始化時(shí)將節(jié)點(diǎn)角色、IP1、IP2等屬性設(shè)置進(jìn)行重寫鉤子,并在節(jié)點(diǎn)狀態(tài)改變時(shí)將重寫標(biāo)志設(shè)置進(jìn)重寫鉤子.重寫鉤子根據(jù)節(jié)點(diǎn)角色、重寫標(biāo)志、地址重寫選項(xiàng)和鉤子位置執(zhí)行對應(yīng)的動(dòng)作(見表3).
表3 重寫鉤子執(zhí)行動(dòng)作對應(yīng)表
Tab.3 Map of rewriting hooks and actions
角色重寫標(biāo)志地址重寫選項(xiàng)鉤子位置執(zhí)行動(dòng)作路由器是無PRE_ROUTING(1)目的地址重寫負(fù)載均衡是目的地址重寫PRE_ROUTING(2)目的地址還原負(fù)載均衡是無LOCAL_OUT(3)源地址重寫路由器否源地址重寫PREROUTING(4)源地址還原
在Linux中實(shí)現(xiàn)狀態(tài)監(jiān)測模塊和地址重寫模塊,并搭建如圖6所示的測試網(wǎng)絡(luò)拓?fù)洵h(huán)境檢驗(yàn)系統(tǒng)性能.
圖6 測試網(wǎng)絡(luò)拓?fù)銯ig.6 Network topology for testing
圖6中,所有鏈路最大帶寬均為100M.測試方法是從U訪問B上的WEB服務(wù),下載一個(gè)10G大小文件,當(dāng)下載到一段時(shí)間后,手工斷開R2<->B之間鏈路,驗(yàn)證文件能否正常下載,同時(shí)監(jiān)視B->R2和B->R3兩條鏈路的流量分布情況.設(shè)置狀態(tài)檢測模塊的T為2s,N1為30,N2為5,結(jié)果如圖7所示.
圖7 測試結(jié)果Fig.7 The testing result
在圖7中,[0,150]s區(qū)間,B->R2的流量很大,表明下載流量從B經(jīng)R2的鏈路返回給用戶,符合正常的工作模式.在150s處,手動(dòng)斷開B<->R2之間的鏈路,導(dǎo)致該鏈路流量直接降到0.各節(jié)點(diǎn)的狀態(tài)監(jiān)測模塊感知到這種變化,經(jīng)過10s,切換系統(tǒng)進(jìn)入地址重寫模式,流量被切換到B<->R3鏈路上,因此B->R3的流量從0開始增長,直至完成后續(xù)下載.比對文件的MD5值,服務(wù)器上的文件和用戶下載的文件相同,表明基于地址重寫的智能雙IP雙線服務(wù)具有較好的可用性.
本文從技術(shù)層面探討如何解決智能雙IP雙線服務(wù)可用性問題,提出基于地址重寫的智能雙IP雙線服務(wù)系統(tǒng)解決方案,通過引入地址重寫技術(shù),描述工作原理,設(shè)計(jì)新系統(tǒng)的架構(gòu),探討狀態(tài)監(jiān)測模塊、地址重寫模塊的功能和運(yùn)行方式,搭建環(huán)境測試系統(tǒng)性能,解決了智能雙IP雙線服務(wù)可用性不高的問題.但在具體應(yīng)用層面上,基于地址重寫的智能雙IP雙線服務(wù)系統(tǒng)還存在一些問題,需要增加新的IP選項(xiàng),需要修改路由器系統(tǒng)軟件和負(fù)載均衡系統(tǒng)軟件,操作起來難度很大.
[1]侯興林,王曉云.服務(wù)可用性監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].軟件,2016,37(2):74-76,80.
[2]陳棟.校園網(wǎng)多鏈路接入的負(fù)載均衡技術(shù)研究[J].哈爾濱師范大學(xué)自然科學(xué)學(xué)報(bào),2014,30(5):48-51.
[3]侯冬青.智能DNS在多出口局域網(wǎng)中的應(yīng)用研究[J].西昌學(xué)院學(xué)報(bào)(自然科學(xué)版),2015,29(1):49-52.
[4]王子榮,胡浩,尹紹鋒,等.基于策略DNS和HTTP Proxy的多宿主網(wǎng)絡(luò)服務(wù)部署的研究[J].計(jì)算機(jī)工程與科學(xué),2014,36(2):238-243.
[5]劉芳,吳瓊.基于Web的集群部署管理系統(tǒng)[J].山東理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2015,29(2):32-35.
[6]ZHANG Z C. Design and realization of multi-export campus network based on redundancy architecture[J]. Computer Science,2012,39(10):219-222.
[7]幸福,楊峰,燕霄翔,等.Linux服務(wù)器下多網(wǎng)口負(fù)載均衡算法的研究[J].計(jì)算機(jī)工程與應(yīng)用,2013,49(24):93-96.
[8]李曉利.智能DNS解析在校園網(wǎng)中的應(yīng)用[J].濰坊學(xué)院學(xué)報(bào),2014,14(2):44-47,55.
[9]JIANG W U.The research and implementation of intelligent DNS system for campus network[J]. Microcomputer Information,2010,26(9):102-104.
[10]王東.智能DNS和NAT技術(shù)在多出口高校校園網(wǎng)中的應(yīng)用[J].重慶科技學(xué)院學(xué)報(bào)(自然科學(xué)版),2012,14(3):151-152,176.
[11]李勇超.光線路自動(dòng)保護(hù)系統(tǒng)技術(shù)及其實(shí)用性探討[D].鄭州:解放軍信息工程大學(xué),2008.
[12]譚欽紅,陳菊,曹懿樂,等.SNMP在OLP系統(tǒng)中的應(yīng)用[J].電視技術(shù),2012,36(21):99-101,155.
[13]楊雪,劉學(xué)升,欒宏之,等.OLP系統(tǒng)在電力光纖通信中的應(yīng)用研究[J].電力系統(tǒng)通信,2012,33(9):56-60.
[14]卓文合,邵廣賢.光纖線路自動(dòng)切換保護(hù)裝置在安徽電力通信網(wǎng)的應(yīng)用研究[J].安徽電氣工程職業(yè)技術(shù)學(xué)院學(xué)報(bào),2013,18(4):121-125.
[15]鄒朝亮.光線路保護(hù)系統(tǒng)OLP在福建電信波分系統(tǒng)中的應(yīng)用與研究[D].北京:北京郵電大學(xué),2011.
[16]賀聿志,章勇,柳斌.多鏈路BGP接入方法的探討[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2016,44(1):148-151.
[17]蘇申,方濱興.BGP路由的動(dòng)態(tài)性研究[J].智能計(jì)算機(jī)與應(yīng)用,2016,6(5):69-70,73.
[18]黎松,諸葛建偉,李星.BGP安全研究[J].軟件學(xué)報(bào),2013,24(1):121-138.
[19]張文盛.源抑制在網(wǎng)絡(luò)流量控制中的應(yīng)用研究[J].微型機(jī)與應(yīng)用,2015,34(17):60-62.
[20]孔金生,任平英.TCP網(wǎng)絡(luò)擁塞控制研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(1):43-46.