劉慕霄,劉憲忠,趙昶宇
(1.海軍裝備部駐北京地區(qū)軍事代表局駐天津地區(qū)第二軍事代表室,天津 300308;2.海軍裝備部駐天津地區(qū)第二軍事代表室,天津 300308;3.天津津航計算技術(shù)研究所,天津 300308)
目前,嵌入式系統(tǒng)的健壯性和穩(wěn)定性是用戶和系統(tǒng)設(shè)計人員都十分關(guān)注的問題。如果在嵌入式系統(tǒng)運行過程中,因為系統(tǒng)硬件或者軟件故障導(dǎo)致整個系統(tǒng)無法繼續(xù)正常工作,則可能會帶來不可預(yù)知的影響和損失。因此,為了維護(hù)嵌入式系統(tǒng)的高可用性和高可靠性,必須采取適當(dāng)?shù)拇胧﹣肀WC嵌入式系統(tǒng)不間斷的穩(wěn)定運行,雙機容錯技術(shù)就是在這樣的背景下產(chǎn)生并在嵌入式系統(tǒng)中得到了廣泛應(yīng)用[1]。
當(dāng)前嵌入式系統(tǒng)中最常見的雙機容錯技術(shù)有無磁盤型、共享磁盤型、磁盤鏡像型、共享和鏡像共存型等,這些方法大多應(yīng)用在專用的容錯系統(tǒng)中,應(yīng)用在通用的容錯系統(tǒng)中的較少[2]。上述這些方法大都是在應(yīng)用層實現(xiàn)容錯的功能,因此不可避免地會帶來以下問題:①增加設(shè)計人員的工作量,設(shè)計人員在實現(xiàn)具體業(yè)務(wù)的同時必須考慮容錯功能的實現(xiàn);②數(shù)據(jù)容錯的可靠性難以保證,設(shè)計人員只要有考慮不周的地方,就可能導(dǎo)致容錯系統(tǒng)無法正確備份,導(dǎo)致備份失效;③系統(tǒng)可擴展性較差,一旦在系統(tǒng)中增加新的功能,設(shè)計人員必須重新考慮備份功能的實現(xiàn),系統(tǒng)的可測試性和可維護(hù)性差。為了能夠有效地保證嵌入式系統(tǒng)穩(wěn)定、可靠、有效和持續(xù)運行,本文提出了一種嵌入式系統(tǒng)的雙機熱備方法。該方法能夠保證設(shè)備在無人監(jiān)管的情況下不間斷正常運行,具有技術(shù)成熟、運行成本低和任務(wù)可靠性較高等優(yōu)點。
雙機熱備技術(shù)一般是在服務(wù)器系統(tǒng)出現(xiàn)臨時故障時采取的一種熱備份技術(shù),通過對服務(wù)器系統(tǒng)的熱備份,可以避免服務(wù)器系統(tǒng)發(fā)生故障時產(chǎn)生的長時間服務(wù)中斷,確保服務(wù)器系統(tǒng)能夠長時間可靠運行。
雙機熱備概念分為廣義和狹義2 種。從廣義上講,就是將2 臺服務(wù)器中的重要服務(wù)進(jìn)行相互備份,并且2臺服務(wù)器共同執(zhí)行同一服務(wù)。當(dāng)任意1 臺服務(wù)器運行時出現(xiàn)故障,另外1 臺服務(wù)器在最短的時間內(nèi)接管該故障服務(wù)器的一切服務(wù),該接管工作不需要人工進(jìn)行干預(yù),保證整個服務(wù)器系統(tǒng)正常不間斷運行。狹義上講,服務(wù)器數(shù)據(jù)同時寫入2 臺服務(wù)器中,或者這2 臺服務(wù)器采用1 個共享存儲設(shè)備。在同一時間2 臺服務(wù)器只有1 臺處于激活(工作)狀態(tài),另外1 臺處于靜默狀態(tài)。當(dāng)處于激活狀態(tài)的服務(wù)器故障時,通過心跳機制激活另外1 臺服務(wù)器,讓其接管當(dāng)前工作。
雙機熱備系統(tǒng)采用故障隔離的工作原理,將發(fā)生故障的設(shè)備以故障點轉(zhuǎn)移的方式讓處于熱備份狀態(tài)的正常設(shè)備接管當(dāng)前工作,保證整個系統(tǒng)的不間斷運行。故障的恢復(fù)不是在故障設(shè)備上,而是在熱備份的設(shè)備上,熱備份的方式不是用來修復(fù)當(dāng)前故障設(shè)備,而僅僅是將故障隔離。
雙機熱備系統(tǒng)中的關(guān)鍵技術(shù)有主備機身份識別技術(shù)、主備機之間心跳通信技術(shù)、主備機同步技術(shù)和主備機故障檢測和切換技術(shù)等。
目前大多數(shù)的雙機熱備系統(tǒng)都采用在主備機端安裝不同軟件的方式。這種方法的優(yōu)點是程序開發(fā)較為簡便、邏輯清晰;缺點是靈活性較差、不便于維護(hù)。為了使主機和備機具有完全對等性,采用“先啟為主”的主備機身份識別機制,即先啟動的為主機,后啟動的為從機。
“先啟為主”的主備機身份識別機制采用端口監(jiān)聽的方法實現(xiàn)。首先在主機和備機上分別配置好對方的IP 地址和通信端口號,在嵌入式系統(tǒng)的任務(wù)啟動后立即創(chuàng)建一個套接字并向?qū)Ψ酵ㄐ哦丝诎l(fā)出連接請求。如果連接成功說明對方已經(jīng)啟動,本機標(biāo)識為備機;如果連接失敗將本機標(biāo)識為主機,并將套接字綁定到主備機通信端口進(jìn)行監(jiān)聽。這樣,無論備機何時啟動,主機都會接受備機的連接請求并與之建立連接。
為了提高嵌入式雙機熱備系統(tǒng)的可靠性,首當(dāng)其沖需要解決的是主機設(shè)備和備機設(shè)備之間的通信問題。雙方通信的可靠程度很大程度上決定了主機設(shè)備和備機設(shè)備數(shù)據(jù)的同步性、主機設(shè)備和備機設(shè)備相互監(jiān)測的準(zhǔn)確性、主機設(shè)備和備機設(shè)備數(shù)據(jù)傳輸?shù)姆€(wěn)定性以及隔離故障機和備用機恢復(fù)重新切入雙機系統(tǒng)的健壯性。通常在主機設(shè)備和備機設(shè)備之間采用心跳信號來相互監(jiān)測對方的工作狀態(tài),并作為診斷設(shè)備故障的一種輔助手段。一旦主機設(shè)備和備機設(shè)備之間的心跳信號發(fā)生故障,則表明有一方設(shè)備出現(xiàn)了故障,同時也能初步確定故障設(shè)備的原因。因此,在主機設(shè)備和備機設(shè)備之間建立心跳通信機制,也是提高嵌入式系統(tǒng)安全性的一種有效方法。
傳統(tǒng)的雙機熱備系統(tǒng)中雙機之間是通過心跳線互發(fā)心跳建立連接通信的。若心跳線發(fā)生故障,就會將原有協(xié)調(diào)的系統(tǒng)分為2 個獨立的個體。由于雙機彼此失去聯(lián)系,都以為對方發(fā)生故障,備用機本能的升為主用機,而主用機由于本身工作正常,繼續(xù)保持主用,從而導(dǎo)致“雙主”現(xiàn)象的產(chǎn)生。傳統(tǒng)的解決“雙主”現(xiàn)象的辦法是增加心跳線的數(shù)量,但是該辦法的缺點是不僅會增加系統(tǒng)的硬件成本,而且還會占用系統(tǒng)的接口資源,新增加的心跳線還會成為潛在的故障點,降低了系統(tǒng)的可維護(hù)性。
為了提高雙機熱備系統(tǒng)的可靠性,主機和備機均采用雙網(wǎng)卡工作,雙網(wǎng)通過交換機連接到局域網(wǎng)中,采用一條心跳線進(jìn)行雙機之間的通信。因此,雙機之間通過心跳線、雙網(wǎng)的狀態(tài)3 種通道傳遞心跳信號。只要這3 種通道有一個能收到對方的心跳,即可認(rèn)為心跳正常。當(dāng)出現(xiàn)心跳失效的情況時,分別選取雙網(wǎng)上的一臺設(shè)備(主機或者備機)或設(shè)備的某個端口作為該通道的遠(yuǎn)程檢測點。當(dāng)某個網(wǎng)絡(luò)通道心跳失效時,雙機通過該網(wǎng)絡(luò)通道檢查設(shè)置的遠(yuǎn)程檢測點,若檢測不到則表明故障出現(xiàn)在本機端;若可以檢測到則表明故障出現(xiàn)在對方。
為了進(jìn)一步提高雙機熱備系統(tǒng)的可用性,雙網(wǎng)通道在收到對方心跳時加入時間戳。在心跳無效的情況下,根據(jù)心跳時間戳,選擇最后收到心跳的網(wǎng)絡(luò),然后去檢查對應(yīng)此網(wǎng)絡(luò)的遠(yuǎn)程檢測點,若可以檢測到,表明對方宕機下線,本機正常,可作為主機運行;否則,標(biāo)明本機宕機,此時應(yīng)工作在備機。雙機通信的流程如圖1 所示。
圖1 主備機通信示意圖
雙機熱備系統(tǒng)中主機設(shè)備與備機設(shè)備必須保持嚴(yán)格意義上的同步,它們之間同步性的好壞直接影響到主機設(shè)備和備機設(shè)備發(fā)生切換后雙方數(shù)據(jù)的一致性。若兩方數(shù)據(jù)同步性不好,則當(dāng)一方接管另一方(故障設(shè)備)工作時,就會造成數(shù)據(jù)的不完整性,從而影響整個嵌入式系統(tǒng)的工作流程。因此,主備機的同步是確保整個系統(tǒng)主機設(shè)備及其備機設(shè)備中程序與數(shù)據(jù)同步運行和實現(xiàn)雙機無縫切換的基礎(chǔ)。此外,主備機設(shè)備在運行過程中的相互監(jiān)測以及當(dāng)一方發(fā)生故障時的故障診斷工作都對主備機之間的同步性能提出了更高的要求。
主備機的同步不僅包括時鐘同步,還包括主備機狀態(tài)和數(shù)據(jù)同步。
主備機的時鐘同步是指硬件上的同步,包括雙機時鐘周期和時鐘時序的同步。在主備機上電后,保證主備機使用的是同一外部有源晶振提供的時鐘周期,以此來保障系統(tǒng)的各個模塊完全按照相同的時鐘頻率運行。
主備機的狀態(tài)和數(shù)據(jù)同步是指主備機之間需要實時進(jìn)行通信,其中包括主備機的狀態(tài)和接收數(shù)據(jù)的實時通信。為了讓主備機的任務(wù)初始化能夠同步開始,必須對主備機同時上電。當(dāng)主機任務(wù)啟動指令到達(dá)的第一時間通知備機啟動任務(wù),使備機同時進(jìn)入工作模式。
在主備機均正常工作的情況下,主備機同時從網(wǎng)絡(luò)上接收信息,但只有主機有權(quán)限向外部設(shè)備發(fā)送信息,備機只接收外部信息,處于信息發(fā)送靜默狀態(tài)。主備機的同步過程如圖2 所示。
圖2 主備機同步過程示意圖
故障檢測技術(shù)是雙機熱備系統(tǒng)進(jìn)行主機設(shè)備和備機設(shè)備切換的關(guān)鍵環(huán)節(jié),通過對設(shè)備進(jìn)行實時準(zhǔn)確地狀態(tài)監(jiān)視和檢測,能夠及時地發(fā)現(xiàn)并上報設(shè)備的故障,并啟動冗余設(shè)備繼續(xù)完成系統(tǒng)當(dāng)前的工作任務(wù),是保證了雙機熱備系統(tǒng)可靠性和穩(wěn)定性的前提和基礎(chǔ)。
采用如下3 種措施實現(xiàn)主備機故障檢測:①在主備機中配備看門狗定時器。在系統(tǒng)上電后,處理器在正常工作時會每隔固定的時間對看門狗計數(shù)器進(jìn)行清零操作。若主機或者備機出現(xiàn)故障,看門狗計數(shù)器值會超過某個閾值,最終會導(dǎo)致看門狗產(chǎn)生復(fù)位信號,使處理器復(fù)位,通過上述方式可判斷主備機是否出現(xiàn)故障。②在主備機上電后,可對系統(tǒng)進(jìn)行自檢操作,包括CPU 檢測、內(nèi)存檢測、I/O 設(shè)備檢測等,可在上電時檢測系統(tǒng)硬件是否工作正常。③在系統(tǒng)運行過程中,主備機之間通過心跳線和雙網(wǎng)的狀態(tài)相互監(jiān)測對方的工作狀態(tài)。由于主備機在上電時通過身份識別已明確自身是主機還是備機,因此,如果在系統(tǒng)運行過程中,主機檢測到備機故障,則不進(jìn)行切換,主機繼續(xù)保持工作;如果備機檢測到主機故障,則進(jìn)行切換,由備機接管主機繼續(xù)工作。
雙機熱備技術(shù)是保證嵌入式實時系統(tǒng)可靠性和穩(wěn)定性最重要和最關(guān)鍵的方法,不僅有效降低了系統(tǒng)出現(xiàn)故障的概率,還大大提高了系統(tǒng)可用性。本文提出的方法具有成本低、易于實現(xiàn)、可靠性高、主備機切換時間短等優(yōu)點,大大滿足短事務(wù)、強實時系統(tǒng)的要求,增強了雙機熱備系統(tǒng)在復(fù)雜、惡劣環(huán)境下的可維護(hù)性。