摘 要:針對路由器高可用性" title="高可用性">高可用性系統(tǒng)中心跳探測模塊的常見問題,,提出一套新型基于網(wǎng)絡(luò)層" title="網(wǎng)絡(luò)層">網(wǎng)絡(luò)層自動調(diào)頻的心跳探測方案。該方案采用雙心跳線,結(jié)合動態(tài)調(diào)節(jié)探測周期的方法,,并在網(wǎng)絡(luò)層中實現(xiàn),。
關(guān)鍵詞:高可用性? 心跳? 網(wǎng)絡(luò)層
?
??? 計算機網(wǎng)絡(luò)已經(jīng)成為現(xiàn)代社會生產(chǎn)和生活的基礎(chǔ)設(shè)施,,而核心路由器作為網(wǎng)絡(luò)的關(guān)鍵結(jié)點,,能否保證服務(wù)的可靠性和穩(wěn)定性是一個極為重要的問題。核心路由器一般承擔著骨干網(wǎng)的運營,,如果發(fā)生致命故障,,將導致大面積網(wǎng)絡(luò)的癱瘓,造成的直接經(jīng)濟損失也是巨大的,。
一般的解決方法是采用雙機熱備的主從切換方式,,如CISCO的HRSP協(xié)議所介紹的一種方法,由一臺active路由器和standby路由器組來承擔高可靠性,。而本文討論的是核心路由器如何解決主備主控板的切換來保證高可靠性的問題,。這樣就產(chǎn)生了一個問題,即如何設(shè)計一種及時且準確的探測機制來發(fā)現(xiàn)主控板故障,,這是能否實現(xiàn)主備切換的基礎(chǔ),。
? ? 本文就已有的心跳(Heartbeat)探測機制存在的優(yōu)點和不足進行討論,并設(shè)計了一種基于網(wǎng)絡(luò)層的可自動調(diào)頻心跳保障模型,。
1 Heartbeat介紹
Heartbeat網(wǎng)絡(luò)是故障發(fā)生時系統(tǒng)間的通信通道,。簡單地說,系統(tǒng)通過心跳網(wǎng)絡(luò)進行周期性的問候信息交流,。系統(tǒng)在正常情況下,,備用處理器發(fā)送信息詢問主用處理器的健康狀況,主用處理器同樣發(fā)送心跳探測包來確定備用處理器是否隨時處于等待狀態(tài)。如果備用處理器在限定的周期內(nèi)未收到主用處理器的探測包,,則表明主用處理器發(fā)生故障,它會自動接管主用處理器的IP地址和各種應(yīng)用服務(wù),,成為新的主用處理器,。當失效處理器恢復(fù)正常后,重新發(fā)狀態(tài)信息給新的主用處理器,,要求其成為備用處理器,。
現(xiàn)有的心跳網(wǎng)絡(luò)連接方式多借助于RS232串行線路和以太網(wǎng)方式。由于心跳網(wǎng)絡(luò)相對于整個網(wǎng)絡(luò)所傳輸?shù)臄?shù)據(jù)量要小,,但對其可靠性要求很高,,即零丟包率,否則連續(xù)的數(shù)據(jù)丟失會引起對方處理器誤認為其宕機,。因以太網(wǎng)價格低廉,、應(yīng)用廣泛、不需要特殊的電纜和硬件設(shè)備,,所以通常被推薦用來實現(xiàn)心跳網(wǎng)絡(luò),。此外其他網(wǎng)絡(luò)介質(zhì)也沒有其傳輸可靠性高。對于傳輸大量數(shù)據(jù)流的情況,,推薦使用快速傳輸網(wǎng)絡(luò),,但是心跳數(shù)據(jù)信息相對較小,現(xiàn)有Heartbeat探測主要存在以下問題,。
(1) 硬件問題造成的誤判
??? 主從雙處理器的設(shè)計目的是為了避免SPOF(單點故障)造成停機,。而心跳線同樣可以成為SPOF。當處理器收不到對方的心跳信息時,,故障原因分為兩種,,一種是主處理器軟硬件的故障;另一種可能是心跳線路自身的故障,。對于前一種情況確實應(yīng)該觸發(fā)主備切換措施,,而第二種情況可能會造成系統(tǒng)誤判而進行主備切換,主備處理器切換必然要造成路由器短時間的異常工作,,所以確定故障的原因比較困難,。
? (2) 心跳周期難以設(shè)定
????作為判斷故障的心跳模塊自身必須可靠穩(wěn)定,所以一般設(shè)計比較簡單,。而心跳周期長度一般采用人為設(shè)置,,但是這個周期是否合理?即是否可以及時發(fā)現(xiàn)故障,,且其發(fā)送探測的頻率過高又不會造成多余的系統(tǒng)負擔,。以上兩個相互制約的因素都是高可用性要考慮的問題。
??? 在實際應(yīng)用中,,心跳網(wǎng)絡(luò)一般處于變化的請求服務(wù)中,,如果系統(tǒng)采用固定心跳周期,,有可能弱化系統(tǒng)的可用性;如果周期過短,處理器需要頻繁處理心跳探測數(shù)據(jù),,影響了系統(tǒng)的效率,;如果周期過長,在故障發(fā)生時,,從處理器可能沒有及時發(fā)現(xiàn)探測心跳未到達而延誤觸發(fā)主備切換模塊,,造成的網(wǎng)絡(luò)癱瘓更與高可用性的要求背道而馳。
?? (3) 心跳鏈路" title="鏈路">鏈路采用套接字以TCP/UDP方式的傳輸機制造成較大的時延
??? 作為對實時性" title="實時性">實時性和可靠性有雙重要求的心跳鏈路,,多數(shù)方案都在應(yīng)用層" title="應(yīng)用層">應(yīng)用層利用SOCKET以UDP或TCP報文方式實現(xiàn)心跳協(xié)議,。其中UDP報文比TCP報文簡短,正好符合心跳協(xié)議的要求,。由于UDP沒有擁塞控制,,所以心跳網(wǎng)絡(luò)如果出現(xiàn)擁塞,UDP會丟棄一些數(shù)據(jù)包,,但不會影響處理器發(fā)送心跳的速率,,同時也帶來不可靠傳輸?shù)膯栴}。如果網(wǎng)絡(luò)在擁塞情況下會丟失一些數(shù)據(jù)包,,這對于零丟包率的心跳檢測將造成很大影響,。
在傳輸速率問題上,無論對于TCP還是UDP的套接字,,實現(xiàn)方式都在應(yīng)用層實現(xiàn),,即心跳報文要經(jīng)過傳輸層、內(nèi)核及接口,,并受到應(yīng)用層任務(wù)切換的影響,,這樣會導致切換時間長達數(shù)秒,難以滿足實時性的要求,。
在可靠性問題上,,如果是單對心跳網(wǎng)絡(luò),則可以對探測包進行編號,,并利用判別機制裁決,。忽略收到非連續(xù)編號的數(shù)據(jù)包的情況,判斷因為心跳網(wǎng)絡(luò)擁塞所致,,而不影響心跳信任級別的周期,。但如果采用雙心跳線網(wǎng)絡(luò),在兩條鏈路上同時出現(xiàn)擁塞情況的可能性較小,,因而避免了由于不可靠傳輸造成的誤判,。
2 自動調(diào)頻雙心跳保障模型設(shè)計方案
????根據(jù)上述在心跳探測技術(shù)中出現(xiàn)的問題,筆者提出一種基于網(wǎng)絡(luò)層的自動調(diào)頻雙心跳保障方案。此方案流程如圖1,,圖中的報文類型見表1,。
?
?
?
????在路由器啟動后,兩塊處理器均屬于初始狀態(tài),,這時尚未確定active和standby,。首先僅在一條心跳線上啟動主備協(xié)商機制。要求主備協(xié)商機制要簡約,,因為在這里沒有必要設(shè)計復(fù)雜的算法選出主用。因而采取比較兩處理板IP地址大小的判決方法,,通過互發(fā)心跳探測報文,,比較IP ADDR值,較小的為主處理器,,進入active狀態(tài),;較大的為備用處理器,進入standby狀態(tài),。
????在確定了主備用地位的同時,,向?qū)Ψ酵ǜ孀约旱纳矸荨_@時啟動雙心跳線,,備用一方發(fā)送心跳探測報文監(jiān)控主用的工作是否正常,;主用收到探測報文進行回復(fù)。備用在工作時要根據(jù)主用發(fā)送回復(fù)的周期值,,計算出系統(tǒng)最合適的心跳探測頻率,,后文將詳細介紹。為了避免由于心跳線發(fā)生故障造成的誤判,,如果備用只收到來自一條心跳線的回復(fù)報文,,則由故障判別機制來確認主用工作正常。
??? 報文類型:00為主備協(xié)商報文,,DATA域攜帶處理器IP地址,;01為主備確定報文,DATA域攜帶裁決結(jié)果,;10為心跳探測報文,,standby→active,要求active給確認,;11為心跳回應(yīng)報文,,active→standby,告訴standby自己正常,。
2.1 雙心跳網(wǎng)絡(luò)探測機制及故障辨別機制
分別由兩個進程各自控制兩條心跳線路上的心跳數(shù)據(jù)發(fā)送,,由故障判別機制判斷處理器的工作狀態(tài)。例如,若從處理器收到來自兩條鏈路的心跳信息,,則判斷主處理器為正常工作狀態(tài),;若從處理器只收到一條鏈路上的心跳信息,則判斷主處理器工作正常,,且心跳線故障,,不觸發(fā)主備切換模塊;若從處理器未收到任意一條線路的心跳信息,,則判斷主處理器失效,,觸發(fā)主備切換模塊。此設(shè)計雖然增加了實現(xiàn)的復(fù)雜性,,但卻解決了實際工程中接口松動等問題造成的系統(tǒng)誤判和不必要的消耗,。雙心跳網(wǎng)絡(luò)探測機制如圖2所示。
?
??? 在功能實現(xiàn)上,,故障判別機制和傳統(tǒng)定時器的作用是相同的,。對于傳統(tǒng)定時器方式:在處理器未收到對方的心跳信息時,啟動定時器,,在所設(shè)置的時間內(nèi)仍沒有收到信息,,判斷為處理器失效,這時由于等待deadline可能已經(jīng)延誤了主備切換的時間,。
??? 由于本方案采取冗余心跳網(wǎng)絡(luò),,對于一條心跳鏈路來說,如果處理器未收到心跳信息,,則進入故障判別模式,,詢問另一條心跳線是否收到心跳信息;如果結(jié)果一致,,則迅速啟動主備切換,。這樣可以減少不必要的等待時間,也可以避免由于線路擁塞造成的誤判,。
2.2 分級的自適應(yīng)周期設(shè)計
??? 針對心跳周期難以設(shè)定的問題,,采用了一種自適應(yīng)周期的設(shè)計。其原理是:首先設(shè)定高,、中,、低三種心跳信任級別的周期:1s、3s,、5s,。心跳頻率調(diào)節(jié)原理如圖3所示,通過最近發(fā)生的N次心跳求其平均值Tr與三個級別相比較,,以確定其下一階段采用的心跳頻率,。這樣可以根據(jù)實際網(wǎng)絡(luò)運行的情況實現(xiàn)高可用性,。
?
2.3 基于網(wǎng)絡(luò)層的心跳傳輸機制設(shè)計
??? 由于以往的心跳傳輸基本采用TCP或UDP方式,在實現(xiàn)中必須遵從TCP/IP協(xié)議信息處理的層次流程,,使實時性的要求無法保證,。為了縮短處理時經(jīng)過的層次,設(shè)計了一種基于網(wǎng)絡(luò)層的心跳傳輸方式,。
心跳模塊工作層次結(jié)構(gòu)圖如圖4所示,。心跳模塊與上層應(yīng)用完全分隔開,它處于鏈路層和網(wǎng)絡(luò)層,。通過在鏈路層對幀頭的類型字段的檢查,,區(qū)分出心跳報文與IP報文。如果是IP報文,,則送入上層協(xié)議棧,;如果是心跳報文,則進入心跳報文隊列,,并觸發(fā)一個中斷,通告心跳模塊進行處理,。以往通過應(yīng)用層的心跳信息必須通過插口層再到應(yīng)用層進行處理,,這個過程要經(jīng)過路由、選徑,、報文確認等一對一地心跳傳輸中所不必要的步驟,,增加了網(wǎng)絡(luò)的開銷,更降低了傳輸效率,。
?
?
以上設(shè)計的方案在ACR路由器的主控支撐軟件主備切換模塊中,,已成為心跳探測機制工作中關(guān)鍵的一環(huán)。實踐證明,,此方案不僅在發(fā)現(xiàn)故障上實現(xiàn)了最低延遲,,同時將誤判率降至最低,為主備切換做好了基礎(chǔ)性工作,。從而為保證系統(tǒng)可靠性提供了前提,。但在實現(xiàn)時增加了系統(tǒng)的復(fù)雜性,因此如何設(shè)計一個高效,、準確且實用的心跳協(xié)議仍是雙機熱備系統(tǒng)設(shè)計中需認真考慮的關(guān)鍵問題之一,。
參考文獻
[1]?尹康凱,王明偉,,李善平.高可用性機群中多個節(jié)點的心跳模型研究.計算機工程,2005.
[2]?David Patterson,Aaron Brown, Pete Broadwell. Recovery??oriented computing(ROC): motivation,definition,techniques,and case STUDIES[R].Technical Report CSD-02-1175,UC Berkeley,2002.
[3]?Sameer Srivastava. Redundancy management for network?devices. 2003. IEEE
[4]?Evan Marcus,Hal Stern. 高可用性系統(tǒng)設(shè)計.北京:清華大學出版社,,2005.
[5]?John L H, David A P. Computer architecture: A quantitative approach[M].北京:機械工業(yè)出版社,?2002.