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

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

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

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

?

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

?

?

?

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

?


??? 在功能實(shí)現(xiàn)上,故障判別機(jī)制和傳統(tǒng)定時(shí)器的作用是相同的。對(duì)于傳統(tǒng)定時(shí)器方式:在處理器未收到對(duì)方的心跳信息時(shí),啟動(dòng)定時(shí)器,在所設(shè)置的時(shí)間內(nèi)仍沒(méi)有收到信息,判斷為處理器失效,這時(shí)由于等待deadline可能已經(jīng)延誤了主備切換的時(shí)間。
??? 由于本方案采取冗余心跳網(wǎng)絡(luò),對(duì)于一條心跳鏈路來(lái)說(shuō),如果處理器未收到心跳信息,則進(jìn)入故障判別模式,詢問(wèn)另一條心跳線是否收到心跳信息;如果結(jié)果一致,則迅速啟動(dòng)主備切換。這樣可以減少不必要的等待時(shí)間,也可以避免由于線路擁塞造成的誤判。
2.2 分級(jí)的自適應(yīng)周期設(shè)計(jì)
??? 針對(duì)心跳周期難以設(shè)定的問(wèn)題,采用了一種自適應(yīng)周期的設(shè)計(jì)。其原理是:首先設(shè)定高、中、低三種心跳信任級(jí)別的周期:1s、3s、5s。心跳頻率調(diào)節(jié)原理如圖3所示,通過(guò)最近發(fā)生的N次心跳求其平均值Tr與三個(gè)級(jí)別相比較,以確定其下一階段采用的心跳頻率。這樣可以根據(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í)性的要求無(wú)法保證。為了縮短處理時(shí)經(jīng)過(guò)的層次,設(shè)計(jì)了一種基于網(wǎng)絡(luò)層的心跳傳輸方式。
  心跳模塊工作層次結(jié)構(gòu)圖如圖4所示。心跳模塊與上層應(yīng)用完全分隔開(kāi),它處于鏈路層和網(wǎng)絡(luò)層。通過(guò)在鏈路層對(duì)幀頭的類型字段的檢查,區(qū)分出心跳報(bào)文與IP報(bào)文。如果是IP報(bào)文,則送入上層協(xié)議棧;如果是心跳報(bào)文,則進(jìn)入心跳報(bào)文隊(duì)列,并觸發(fā)一個(gè)中斷,通告心跳模塊進(jìn)行處理。以往通過(guò)應(yīng)用層的心跳信息必須通過(guò)插口層再到應(yīng)用層進(jìn)行處理,這個(gè)過(guò)程要經(jīng)過(guò)路由、選徑、報(bào)文確認(rèn)等一對(duì)一地心跳傳輸中所不必要的步驟,增加了網(wǎng)絡(luò)的開(kāi)銷,更降低了傳輸效率。

?

?


  以上設(shè)計(jì)的方案在ACR路由器的主控支撐軟件主備切換模塊中,已成為心跳探測(cè)機(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)鍵問(wè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)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。