王 飛,曹桂均
(中國鐵道科學研究院 通信信號研究所,北京 100081)
計算機系統的廣泛應用極大地提高了整個社會的生產效率,但與此同時,對計算機系統的依賴也產生了極大的風險,一些內部和外部的故障都會導致系統的破壞、數據的丟失。因此,盡可能地提高系統的可用性就顯得尤為重要。雙機熱備是高可用系統中一個重要的機制,利用故障點轉移的方式保障業務的不間斷運行是提高系統可用性的一個行之有效的方法。
雙機熱備使用2臺主機作為一個整體共同執行同一服務,其中一臺為主用機,另一臺為備用機。在正常情況下,同一時刻只有主用機進行邏輯運算、完成與其它設備的信息交換,對外提供服務等任務。雙機互相監視對方的運行情況。當主用機出現故障或由于維修等原因退出,不能支持系統正常工作時,運行在主用機上的雙機軟件會通知備用機,或者通過運行在備用機上雙機軟件的診斷將自身激活,從而在不需要人工干預的情況下,完成對主用機工作的接管,繼續支持關鍵應用服務。其業務的恢復不是在原服務器,而是在備用服務器,有效防止系統崩潰給企業帶來的巨大損失。雙機熱備示意圖如圖1所示。

圖1 雙機熱備示意圖
從心跳通信的角度分析,雙機熱備系統的故障分為2種:(1)非心跳通信故障,例如:應用程序故障,網絡故障等。主用機發生非心跳通信故障,可以通過心跳通道將自身的故障信息發送給備用機,備用機分析主用機的心跳信息并結合自身的工作狀態決定本身是否升為主用機;(2)心跳通信故障,例如,服務器宕機等故障。主用機心跳隨著服務器的宕機而失效,備用機一旦檢測到主用機心跳失效,雙機軟件便會將備用機激活,升為主用機。
雙機熱備系統中雙機之間通過心跳線建立通信連接,互發心跳。當聯系雙機的心跳線斷開,本來為一整體、動作協調的系統,就會分裂為2個獨立的個體。由于相互之間失去了聯系,都以為是對方發生了故障,所以備用機會本能地升為主用機;主用機由于本身工作狀態正常,則繼續保持主用,從而出現2臺機器同時主用的現象,這種現象稱為“雙主”。雙主的出現不符合故障-安全原則,是一種不安全的工作狀態。在這種情況下,可能會出現以下問題:
(1)雙機爭奪系統的共享資源,導致雙機都不能正常工作。
(2)雙機同時工作,導致系統邏輯混亂或數據損壞。
因此,傳統的雙機熱備系統可以防護系統出現的單點故障,即使同時發生多點故障,系統可以安全地降為備用機。但是,當心跳線發生故障時,傳統的雙機熱備系統沒有提供安全、可靠的防護措施,一旦出現雙主,將會嚴重影響系統的正常運行,給系統帶來破壞性的影響。
傳統的方案是增加心跳線的數量。此方案在商用雙機熱備系統中有一定范圍的應用。冗余的心跳線使系統的雙機通信更加強壯,減小心跳故障出現的概率。但冗余的心跳線不能保證心跳通道的絕對安全,依然存在全部斷開的風險。并且增加心跳線意味著增加系統的硬件成本,不僅會占用系統的接口資源,還存在成為潛在的故障點,降低系統的可維護性等問題。
另一種方案是啟用“磁盤鎖”。正在服務的一方鎖住共享磁盤,“雙主”發生時,讓對方完全“搶不走”共享磁盤資源。但使用“磁盤鎖”也會有一個不小的問題,如果占用共享盤的一方不主動“解鎖”,另一方就永遠得不到共享磁盤。現實中假如主用機突然死機或崩潰,就不可能執行解鎖命令,備用機也就接管不了共享資源和應用服務,此方案存在降低系統的可用性的風險。
本文針對雙機熱備系統中存在的“雙主”問題,在不改變原有系統結構的前提下,提出一種全新的,完全從軟件上解決該問題的方案。
雙機熱備系統的網絡為了提高可靠性,一般設計為雙網,分別稱為A網、B網。雙網通過交換機接到局域網中,所以傳遞雙機心跳信息的物理通道,除了心跳線,還可以把機器的A/B網通道也納入其中。這樣雙機內部心跳信息的通道就為心跳線和“A/B網”冗余狀態。只要這3個通道有一個能收到對方的心跳,即可視為心跳正常。
系統在多通道冗余的情況下,仍然會出現心跳失效的情況,這時考慮借助于雙機之外的第三方。這里采用的是設置遠程檢測點。分別選取雙網上的一臺設備或設備的某個端口作為該通道的遠程檢測點。當某個網絡通道心跳失效,這時雙機通過該網絡通道檢查設置的遠程檢測點,若檢測不到則表明斷點就出在本端,不僅心跳,對外服務的本端網絡鏈路也斷了;若可以檢測得到則說明本端連接正常,斷點出現在對方。設置遠程檢測點這種方式簡單可靠,其結果可以作為本機主備狀態切換的重要參考條件。
為進一步提高雙機系統在故障情況下的可用性,雙網通道在收到的心跳上加入時間戳。一旦網絡通道收不到對方心跳,則記錄最后一包心跳的時間戳,若該網絡通道的心跳恢復則該時間戳失效。通過比較時間戳可使主機判斷自身工作狀態。利用雙網的雙機熱備系統示意圖如圖2所示。

圖2 利用雙網的雙機熱備系統示意圖
雙機熱備軟件是構建雙機熱備系統的核心,實現了對整個系統工作狀態的監測、心跳信息的收發和邏輯運算等功能。對于雙主防護功能的實現主要是依靠雙機軟件完成的。
雙機在通過心跳線互發心跳進行通信的同時,也通過網絡通道,將檢測到的本機的應用狀態(應用程序狀態與雙網狀態)、當前主備狀態等信息采用UDP單播的方式給它機發一個自定義格式的心跳。心跳線上的信息與網絡上的心跳信息可以相同也可以不同,由心跳線的類型決定。
在心跳有效的情況下,主機上的雙機軟件通過心跳信息獲取對方的工作狀態,雙機的主備用完全依靠雙機軟件邏輯判斷的結果。在心跳無效的情況下,雙機軟件并不會簡單的認為對方宕機,而是根據心跳的時間戳,選擇最后收到心跳的網絡,然后去檢查對應此網絡的遠程檢測點,若可以檢測到,說明對方宕機下線,本機正常在線,可以作為主用機運行。若檢測不到則說明本機的網絡斷了,即使對方宕機,本機也不能正常工作,應工作在備用。雙主防護方案如圖3所示。

圖3 雙主機方案示意圖
為了驗證本方案的有效性,需要對本方案進行測試。本測試模仿系統在實際運行過程中可能發生的故障,重點測試雙機熱備系統在心跳失效情況下的雙機切換功能,并將傳統的雙機熱備方案加入對比測試,測試結果對比見表1。

表1 測試結果對比
測試表明,本方案能夠在發生各種故障的情況下進行正確的切換。由于該方案擁有2個冗余的心跳通道,心跳線的單點故障不會對系統造成影響。并且在心跳線故障的情況下,系統發生多點故障,該方案可最大限度地保障系統的可用性。
本方案借助于系統網絡和設置遠程檢測點,擁有更高的可靠性和安全性;不需要增加硬件,不需要對系統結構進行調整,對現有雙機熱備系統有較強的兼容性。經過測試表明,本方案較好地解決了心跳線故障導致系統出現的雙主現象,并且在出現多點故障的情況下,依然可以保障系統正常工作或安全的降為雙備機運行,最大限度保證了系統的安全性、可用性和可靠性。同時,增強了雙機熱備系統在復雜、惡劣環境下的可維護性。
[1] 劉朝英,李 萍. 中國鐵路分散自律調度集中[M].北京:中國鐵道出版社,2009.
[2] 曹桂均,張 華. 動車基地調度集中系統研究[J].中國鐵路,2012(4):55-59.
[3] 吳汶麒. 國外鐵路信號新技術[M].北京:中國鐵道出版社,2000.