文/徐秀敏 于海波 田昀 張震雷 賴飛
隨著互聯網、大數據、物聯網等技術的迅猛發展,為國內國外、各行各業的業務運行模式帶來了改變和挑戰,包括金融行業、醫療行業、公共安全、能源行業等關系國計民生的重要行業在內的各大領域均提高了自身的信息化水平,形成了無處不在的泛在信息化網絡,這些行業對信息系統服務穩定性的要求極高。以電網信息化為例,電網發展與經濟發展息息相關,其發展趨勢呈正相關關系。電網調度、電網運行監測數據等業務對服務穩定性、響應實時性等指標有相當高的要求,不允許業務中斷。而黑客破壞、自然災害、人為誤操作、設備自身損耗等因素均可造成服務中斷,將為生產運行、生活服務等帶來巨大影響。因此需要業務服務器及數據服務器一直處于持續的運行狀態,需要配置高質量高性能高可用的服務器系統,為安全生產提供保障。
因此,為了保障系統中數據及作業安全性、連續性,需要一種雙機容錯解決方案,即雙機熱備份,它是應對服務器臨時故障所實現的一種備份技術。雙機熱備份通過磁盤陣列或純軟件模式,使兩臺服務器彼此連接成為互為備份的雙機服務器系統,可通過設置檢測點從系統、應用、網絡三方面進行故障檢測,包括:通過雙機熱備軟件間的心跳進行系統檢測;進行用戶應用程序、數據庫等的應用檢測;對可選的對網絡路徑、網卡的網絡檢測。一旦主服務器停機后,可通過手動切換或故障切換使備份服務器能繼續提供服務,防止用戶的數據或業務請求被中斷。雙機熱備系統應運而生,并已成熟應用,但現有的雙機熱備系統存在著或價格昂貴或易發生負載失衡的狀況,因此本文設計了一種簡便的雙機熱備份的狀態機,該狀態機實現在一臺獨立的控制器上,并給出備份實現流程。
現有雙機備份技術主要包括兩種:一是基于存儲器(磁盤陣列)方式,其存儲方式為共享存儲或全冗余(雙機雙存儲),將用戶數據放在存儲設備即磁盤陣列上,主備服務器通過磁盤陣列共享數據,如圖1所示。二是復制方式,僅選用主備兩臺服務器,采用鏡像軟件將數據從一臺服務器實時的復制到另一臺服務器,保障兩臺服務器間的數據一致性,發生故障時進行服務器的切換,如圖2所示。
針對于磁盤陣列方式,共享存儲器的價格昂貴,適用范圍小。針對于復制方式,當主備服務器所構成的雙機服務系統出現故障時,不易判斷故障狀態,需要提供額外的狀態監測工作,并針對故障情況制定解決方案;當心跳線出現故障時,主備服務器將同時進入工作狀態,可能造成系統服務混亂;沒有提供仲裁機制,不能在主備服務器間進行負載均衡,主服務器的性能容易成為服務系統的瓶頸。
本文針對現有問題及諸多學者提出的解決方案進行了研究,如:基于開源項目OpenSAF的雙機熱備系統已經針對現有的共享存儲的硬件備份、非共享存儲的軟件備份等存在的問題提出了解決方案,其有效的減少了數據備份時間,但依賴于OpenSAF。基于MySQL二進制日志(Binlog)進行SQL還原的研究,提出了分布式異構數據庫間數據同步的解決方案及工具設計,其研究成果可用于解決異構數據庫間數據同步中存在的數據格式不匹配、同步速度不匹配等問題,但應用成果局限于異構數據庫。
本文意在解決傳統雙機熱備方案中易出現的控制無序、不穩定、高成本的問題,給出一種易于控制、經濟且實現簡單的設計方案,依賴兩臺普通服務器和一臺控制機實現服務器系統。
在傳統雙機服務器系統基礎上,本文在客戶端、雙機服務器間增加了控制器,我們將兩臺互為備份的服務器稱為服務器1、服務器2.

圖1:基于共享存儲的雙機熱備

圖2:基于復制方式的雙機熱備

圖3:基于控制器的雙機服務系統架構
客戶端通過控制器與服務器進行數據通信,控制器接收到客戶端數據讀操作請求后,根據服務器1、服務器2的運行狀態及負載狀態進行仲裁,仲裁后分配同步運行的服務器中低負載的服務器提供服務,并由控制器返回應答信息,可有效的避免負載不均衡造成的服務瓶頸。整個過程中控制器、雙主機對客戶端提供透明服務,客戶端無需了解服務細節及仲裁過程,該方法簡便且保障了業務系統穩定運行。
在無控制器的雙機雙機服務系統中,若服務器間心跳線出現故障,則主備服務器將同時進入工作狀態,可能造成系統服務混亂。本文所增加的控制器通過查詢方式定時獲取服務器1和服務器2的狀態,并接收服務器返回的操作結果。定時讀取服務器同步狀態,在心跳線出現故障時依靠控制器即可判斷出服務器的運行狀態,不受心跳線故障的影響,認可提供穩定服務。
同時,在控制器中維護主備服務器仲裁狀態機,在圖3中給出的即是控制機、服務器1、服務器2構成的雙主機服務器系統。
通過有限狀態機建立的數學模型,可解決數字系統設計中的輸入、輸出等邏輯問題的處理。本文對有限狀態機在建立數學模型時的多種場景應用進行了研究,對已有成果中建模方法、模型求解等方面進行了分析,結合本研究方向所面臨的問題進行了深入研究,建立了雙機服務器備份時的仲裁狀態機。
圖4中所示的是本文所設計的主備服務器仲裁狀態機,根據對雙機服務器系統的特點分析可知:
狀態機有三個臨時態——上電初始化、實時備份、批量備份;
三個穩定態——單服務器態、主備同步、主備異步;
有八個輸入——單服務器在線、備服務器上線、批量同步成功、批量同步失敗、服務器離線、實時同步、實時同步成功、實時同步失敗。
將服務器當前穩定態、同步狀態等約束條件作為輸入信號,以此驅動狀態機的狀態轉移,實現雙機服務器同步狀態的自動控制。
具體設計如下:
控制器上電后進入上電初始化態時,主要存在兩種場景——服務器已上線、服務器未上線;接收的“單服務器在線”輸入有兩種來源——在初始化時指定的主服務器上報;或根據服務器上線時間進行主備服務器的選擇,先上線的服務器為主服務器。
單服務器態時,客戶端所有的操作均通過控制器直接發送給該服務器。
控制器收到客戶端的數據修改和寫請求時,基于服務器的角色發送給主服務器,在成功響應請求后將數據備份給備服務器,并根據服務器返回的消息運轉狀態機,此為數據的實時備份。
當單服務器掉線后重新上線時,控制器觸發主服務器向新上線備份服務器的數據發送,并根據服務器返回的消息運轉狀態機,此為數據的批量備份。

圖4:主備服務器仲裁狀態機
在收到客戶端的查詢請求時,如果服務器系統處于“主備同步狀態”,控制器可根據主備服務器的負載情況,決定向哪個服務器發送數據查詢的請求。
如果服務器系統處于“主備異步狀態”,則由主服務器響應客戶端的查詢請求。
本文立足解決傳統雙機服務器易發生的可控性、穩定性等問題,在原有雙機服務器的基礎上增加控制器,與服務器1、服務器2共同構成雙主機服務器系統,實現對雙主機服務器系統的控制,可實時了解服務器運行狀態及數據同步情況、根據雙機負載情況分發客戶端請求。同時所設計了主備服務器仲裁狀態機,通過輸入實現對主備服務器臨時態、穩定態間的切換,實現對雙機服務器運行狀況的標準化仲裁。雙機服務系統在提供業務穩定運行中實用性強,因此具有進行深入研究的價值。