《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > 一種新型的網(wǎng)絡(luò)層心跳探測方案

一種新型的網(wǎng)絡(luò)層心跳探測方案

2008-02-25
作者:賈 娟,汪斌強(qiáng)

摘 要:針對路由器高可用性" title="高可用性">高可用性系統(tǒng)中心跳探測模塊的常見問題,提出一套新型基于網(wǎng)絡(luò)層" title="網(wǎng)絡(luò)層">網(wǎng)絡(luò)層自動調(diào)頻的心跳探測方案。該方案采用雙心跳線,結(jié)合動態(tài)調(diào)節(jié)探測周期的方法,并在網(wǎng)絡(luò)層中實(shí)現(xiàn)。
關(guān)鍵詞:高可用性? 心跳? 網(wǎng)絡(luò)層

?

??? 計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)成為現(xiàn)代社會生產(chǎn)和生活的基礎(chǔ)設(shè)施,而核心路由器作為網(wǎng)絡(luò)的關(guān)鍵結(jié)點(diǎn),能否保證服務(wù)的可靠性和穩(wěn)定性是一個(gè)極為重要的問題。核心路由器一般承擔(dān)著骨干網(wǎng)的運(yùn)營,如果發(fā)生致命故障,將導(dǎo)致大面積網(wǎng)絡(luò)的癱瘓,造成的直接經(jīng)濟(jì)損失也是巨大的。
  一般的解決方法是采用雙機(jī)熱備的主從切換方式,如CISCO的HRSP協(xié)議所介紹的一種方法,由一臺active路由器和standby路由器組來承擔(dān)高可靠性。而本文討論的是核心路由器如何解決主備主控板的切換來保證高可靠性的問題。這樣就產(chǎn)生了一個(gè)問題,即如何設(shè)計(jì)一種及時(shí)且準(zhǔn)確的探測機(jī)制來發(fā)現(xiàn)主控板故障,這是能否實(shí)現(xiàn)主備切換的基礎(chǔ)。
? ? 本文就已有的心跳(Heartbeat)探測機(jī)制存在的優(yōu)點(diǎn)和不足進(jìn)行討論,并設(shè)計(jì)了一種基于網(wǎng)絡(luò)層的可自動調(diào)頻心跳保障模型。
1 Heartbeat介紹
  Heartbeat網(wǎng)絡(luò)是故障發(fā)生時(shí)系統(tǒng)間的通信通道。簡單地說,系統(tǒng)通過心跳網(wǎng)絡(luò)進(jìn)行周期性的問候信息交流。系統(tǒng)在正常情況下,備用處理器發(fā)送信息詢問主用處理器的健康狀況,主用處理器同樣發(fā)送心跳探測包來確定備用處理器是否隨時(shí)處于等待狀態(tài)。如果備用處理器在限定的周期內(nèi)未收到主用處理器的探測包,則表明主用處理器發(fā)生故障,它會自動接管主用處理器的IP地址和各種應(yīng)用服務(wù),成為新的主用處理器。當(dāng)失效處理器恢復(fù)正常后,重新發(fā)狀態(tài)信息給新的主用處理器,要求其成為備用處理器。
  現(xiàn)有的心跳網(wǎng)絡(luò)連接方式多借助于RS232串行線路和以太網(wǎng)方式。由于心跳網(wǎng)絡(luò)相對于整個(gè)網(wǎng)絡(luò)所傳輸?shù)臄?shù)據(jù)量要小,但對其可靠性要求很高,即零丟包率,否則連續(xù)的數(shù)據(jù)丟失會引起對方處理器誤認(rèn)為其宕機(jī)。因以太網(wǎng)價(jià)格低廉、應(yīng)用廣泛、不需要特殊的電纜和硬件設(shè)備,所以通常被推薦用來實(shí)現(xiàn)心跳網(wǎng)絡(luò)。此外其他網(wǎng)絡(luò)介質(zhì)也沒有其傳輸可靠性高。對于傳輸大量數(shù)據(jù)流的情況,推薦使用快速傳輸網(wǎng)絡(luò),但是心跳數(shù)據(jù)信息相對較小,現(xiàn)有Heartbeat探測主要存在以下問題。
  (1) 硬件問題造成的誤判
??? 主從雙處理器的設(shè)計(jì)目的是為了避免SPOF(單點(diǎn)故障)造成停機(jī)。而心跳線同樣可以成為SPOF。當(dāng)處理器收不到對方的心跳信息時(shí),故障原因分為兩種,一種是主處理器軟硬件的故障;另一種可能是心跳線路自身的故障。對于前一種情況確實(shí)應(yīng)該觸發(fā)主備切換措施,而第二種情況可能會造成系統(tǒng)誤判而進(jìn)行主備切換,主備處理器切換必然要造成路由器短時(shí)間的異常工作,所以確定故障的原因比較困難。
 ? (2) 心跳周期難以設(shè)定
????作為判斷故障的心跳模塊自身必須可靠穩(wěn)定,所以一般設(shè)計(jì)比較簡單。而心跳周期長度一般采用人為設(shè)置,但是這個(gè)周期是否合理?即是否可以及時(shí)發(fā)現(xiàn)故障,且其發(fā)送探測的頻率過高又不會造成多余的系統(tǒng)負(fù)擔(dān)。以上兩個(gè)相互制約的因素都是高可用性要考慮的問題。
??? 在實(shí)際應(yīng)用中,心跳網(wǎng)絡(luò)一般處于變化的請求服務(wù)中,如果系統(tǒng)采用固定心跳周期,有可能弱化系統(tǒng)的可用性;如果周期過短,處理器需要頻繁處理心跳探測數(shù)據(jù),影響了系統(tǒng)的效率;如果周期過長,在故障發(fā)生時(shí),從處理器可能沒有及時(shí)發(fā)現(xiàn)探測心跳未到達(dá)而延誤觸發(fā)主備切換模塊,造成的網(wǎng)絡(luò)癱瘓更與高可用性的要求背道而馳。
?? (3) 心跳鏈路" title="鏈路">鏈路采用套接字以TCP/UDP方式的傳輸機(jī)制造成較大的時(shí)延
??? 作為對實(shí)時(shí)性" title="實(shí)時(shí)性">實(shí)時(shí)性和可靠性有雙重要求的心跳鏈路,多數(shù)方案都在應(yīng)用層" title="應(yīng)用層">應(yīng)用層利用SOCKET以UDP或TCP報(bào)文方式實(shí)現(xiàn)心跳協(xié)議。其中UDP報(bào)文比TCP報(bào)文簡短,正好符合心跳協(xié)議的要求。由于UDP沒有擁塞控制,所以心跳網(wǎng)絡(luò)如果出現(xiàn)擁塞,UDP會丟棄一些數(shù)據(jù)包,但不會影響處理器發(fā)送心跳的速率,同時(shí)也帶來不可靠傳輸?shù)膯栴}。如果網(wǎng)絡(luò)在擁塞情況下會丟失一些數(shù)據(jù)包,這對于零丟包率的心跳檢測將造成很大影響。
  在傳輸速率問題上,無論對于TCP還是UDP的套接字,實(shí)現(xiàn)方式都在應(yīng)用層實(shí)現(xiàn),即心跳報(bào)文要經(jīng)過傳輸層、內(nèi)核及接口,并受到應(yīng)用層任務(wù)切換的影響,這樣會導(dǎo)致切換時(shí)間長達(dá)數(shù)秒,難以滿足實(shí)時(shí)性的要求。
  在可靠性問題上,如果是單對心跳網(wǎng)絡(luò),則可以對探測包進(jìn)行編號,并利用判別機(jī)制裁決。忽略收到非連續(xù)編號的數(shù)據(jù)包的情況,判斷因?yàn)樾奶W(wǎng)絡(luò)擁塞所致,而不影響心跳信任級別的周期。但如果采用雙心跳線網(wǎng)絡(luò),在兩條鏈路上同時(shí)出現(xiàn)擁塞情況的可能性較小,因而避免了由于不可靠傳輸造成的誤判。
2 自動調(diào)頻雙心跳保障模型設(shè)計(jì)方案
????根據(jù)上述在心跳探測技術(shù)中出現(xiàn)的問題,筆者提出一種基于網(wǎng)絡(luò)層的自動調(diào)頻雙心跳保障方案。此方案流程如圖1,圖中的報(bào)文類型見表1。

?

?

?

????在路由器啟動后,兩塊處理器均屬于初始狀態(tài),這時(shí)尚未確定active和standby。首先僅在一條心跳線上啟動主備協(xié)商機(jī)制。要求主備協(xié)商機(jī)制要簡約,因?yàn)樵谶@里沒有必要設(shè)計(jì)復(fù)雜的算法選出主用。因而采取比較兩處理板IP地址大小的判決方法,通過互發(fā)心跳探測報(bào)文,比較IP ADDR值,較小的為主處理器,進(jìn)入active狀態(tài);較大的為備用處理器,進(jìn)入standby狀態(tài)。
????在確定了主備用地位的同時(shí),向?qū)Ψ酵ǜ孀约旱纳矸荨_@時(shí)啟動雙心跳線,備用一方發(fā)送心跳探測報(bào)文監(jiān)控主用的工作是否正常;主用收到探測報(bào)文進(jìn)行回復(fù)。備用在工作時(shí)要根據(jù)主用發(fā)送回復(fù)的周期值,計(jì)算出系統(tǒng)最合適的心跳探測頻率,后文將詳細(xì)介紹。為了避免由于心跳線發(fā)生故障造成的誤判,如果備用只收到來自一條心跳線的回復(fù)報(bào)文,則由故障判別機(jī)制來確認(rèn)主用工作正常。
??? 報(bào)文類型:00為主備協(xié)商報(bào)文,DATA域攜帶處理器IP地址;01為主備確定報(bào)文,DATA域攜帶裁決結(jié)果;10為心跳探測報(bào)文,standby→active,要求active給確認(rèn);11為心跳回應(yīng)報(bào)文,active→standby,告訴standby自己正常。
2.1 雙心跳網(wǎng)絡(luò)探測機(jī)制及故障辨別機(jī)制
  分別由兩個(gè)進(jìn)程各自控制兩條心跳線路上的心跳數(shù)據(jù)發(fā)送,由故障判別機(jī)制判斷處理器的工作狀態(tài)。例如,若從處理器收到來自兩條鏈路的心跳信息,則判斷主處理器為正常工作狀態(tài);若從處理器只收到一條鏈路上的心跳信息,則判斷主處理器工作正常,且心跳線故障,不觸發(fā)主備切換模塊;若從處理器未收到任意一條線路的心跳信息,則判斷主處理器失效,觸發(fā)主備切換模塊。此設(shè)計(jì)雖然增加了實(shí)現(xiàn)的復(fù)雜性,但卻解決了實(shí)際工程中接口松動等問題造成的系統(tǒng)誤判和不必要的消耗。雙心跳網(wǎng)絡(luò)探測機(jī)制如圖2所示。

?


??? 在功能實(shí)現(xiàn)上,故障判別機(jī)制和傳統(tǒng)定時(shí)器的作用是相同的。對于傳統(tǒng)定時(shí)器方式:在處理器未收到對方的心跳信息時(shí),啟動定時(shí)器,在所設(shè)置的時(shí)間內(nèi)仍沒有收到信息,判斷為處理器失效,這時(shí)由于等待deadline可能已經(jīng)延誤了主備切換的時(shí)間。
??? 由于本方案采取冗余心跳網(wǎng)絡(luò),對于一條心跳鏈路來說,如果處理器未收到心跳信息,則進(jìn)入故障判別模式,詢問另一條心跳線是否收到心跳信息;如果結(jié)果一致,則迅速啟動主備切換。這樣可以減少不必要的等待時(shí)間,也可以避免由于線路擁塞造成的誤判。
2.2 分級的自適應(yīng)周期設(shè)計(jì)
??? 針對心跳周期難以設(shè)定的問題,采用了一種自適應(yīng)周期的設(shè)計(jì)。其原理是:首先設(shè)定高、中、低三種心跳信任級別的周期:1s、3s、5s。心跳頻率調(diào)節(jié)原理如圖3所示,通過最近發(fā)生的N次心跳求其平均值Tr與三個(gè)級別相比較,以確定其下一階段采用的心跳頻率。這樣可以根據(jù)實(shí)際網(wǎng)絡(luò)運(yùn)行的情況實(shí)現(xiàn)高可用性。

?


2.3 基于網(wǎng)絡(luò)層的心跳傳輸機(jī)制設(shè)計(jì)
??? 由于以往的心跳傳輸基本采用TCP或UDP方式,在實(shí)現(xiàn)中必須遵從TCP/IP協(xié)議信息處理的層次流程,使實(shí)時(shí)性的要求無法保證。為了縮短處理時(shí)經(jīng)過的層次,設(shè)計(jì)了一種基于網(wǎng)絡(luò)層的心跳傳輸方式。
  心跳模塊工作層次結(jié)構(gòu)圖如圖4所示。心跳模塊與上層應(yīng)用完全分隔開,它處于鏈路層和網(wǎng)絡(luò)層。通過在鏈路層對幀頭的類型字段的檢查,區(qū)分出心跳報(bào)文與IP報(bào)文。如果是IP報(bào)文,則送入上層協(xié)議棧;如果是心跳報(bào)文,則進(jìn)入心跳報(bào)文隊(duì)列,并觸發(fā)一個(gè)中斷,通告心跳模塊進(jìn)行處理。以往通過應(yīng)用層的心跳信息必須通過插口層再到應(yīng)用層進(jìn)行處理,這個(gè)過程要經(jīng)過路由、選徑、報(bào)文確認(rèn)等一對一地心跳傳輸中所不必要的步驟,增加了網(wǎng)絡(luò)的開銷,更降低了傳輸效率。

?

?


  以上設(shè)計(jì)的方案在ACR路由器的主控支撐軟件主備切換模塊中,已成為心跳探測機(jī)制工作中關(guān)鍵的一環(huán)。實(shí)踐證明,此方案不僅在發(fā)現(xiàn)故障上實(shí)現(xiàn)了最低延遲,同時(shí)將誤判率降至最低,為主備切換做好了基礎(chǔ)性工作。從而為保證系統(tǒng)可靠性提供了前提。但在實(shí)現(xiàn)時(shí)增加了系統(tǒng)的復(fù)雜性,因此如何設(shè)計(jì)一個(gè)高效、準(zhǔn)確且實(shí)用的心跳協(xié)議仍是雙機(jī)熱備系統(tǒng)設(shè)計(jì)中需認(rèn)真考慮的關(guān)鍵問題之一。
參考文獻(xiàn)
[1]?尹康凱,王明偉,李善平.高可用性機(jī)群中多個(gè)節(jié)點(diǎn)的心跳模型研究.計(jì)算機(jī)工程,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è)計(jì).北京:清華大學(xué)出版社,2005.
[5]?John L H, David A P. Computer architecture: A quantitative approach[M].北京:機(jī)械工業(yè)出版社,?2002.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。