文/徐秀敏 于海波 田昀 張震雷 賴飛
隨著互聯(lián)網(wǎng)、大數(shù)據(jù)、物聯(lián)網(wǎng)等技術(shù)的迅猛發(fā)展,為國內(nèi)國外、各行各業(yè)的業(yè)務(wù)運(yùn)行模式帶來了改變和挑戰(zhàn),包括金融行業(yè)、醫(yī)療行業(yè)、公共安全、能源行業(yè)等關(guān)系國計民生的重要行業(yè)在內(nèi)的各大領(lǐng)域均提高了自身的信息化水平,形成了無處不在的泛在信息化網(wǎng)絡(luò),這些行業(yè)對信息系統(tǒng)服務(wù)穩(wěn)定性的要求極高。以電網(wǎng)信息化為例,電網(wǎng)發(fā)展與經(jīng)濟(jì)發(fā)展息息相關(guān),其發(fā)展趨勢呈正相關(guān)關(guān)系。電網(wǎng)調(diào)度、電網(wǎng)運(yùn)行監(jiān)測數(shù)據(jù)等業(yè)務(wù)對服務(wù)穩(wěn)定性、響應(yīng)實時性等指標(biāo)有相當(dāng)高的要求,不允許業(yè)務(wù)中斷。而黑客破壞、自然災(zāi)害、人為誤操作、設(shè)備自身損耗等因素均可造成服務(wù)中斷,將為生產(chǎn)運(yùn)行、生活服務(wù)等帶來巨大影響。因此需要業(yè)務(wù)服務(wù)器及數(shù)據(jù)服務(wù)器一直處于持續(xù)的運(yùn)行狀態(tài),需要配置高質(zhì)量高性能高可用的服務(wù)器系統(tǒng),為安全生產(chǎn)提供保障。
因此,為了保障系統(tǒng)中數(shù)據(jù)及作業(yè)安全性、連續(xù)性,需要一種雙機(jī)容錯解決方案,即雙機(jī)熱備份,它是應(yīng)對服務(wù)器臨時故障所實現(xiàn)的一種備份技術(shù)。雙機(jī)熱備份通過磁盤陣列或純軟件模式,使兩臺服務(wù)器彼此連接成為互為備份的雙機(jī)服務(wù)器系統(tǒng),可通過設(shè)置檢測點從系統(tǒng)、應(yīng)用、網(wǎng)絡(luò)三方面進(jìn)行故障檢測,包括:通過雙機(jī)熱備軟件間的心跳進(jìn)行系統(tǒng)檢測;進(jìn)行用戶應(yīng)用程序、數(shù)據(jù)庫等的應(yīng)用檢測;對可選的對網(wǎng)絡(luò)路徑、網(wǎng)卡的網(wǎng)絡(luò)檢測。一旦主服務(wù)器停機(jī)后,可通過手動切換或故障切換使備份服務(wù)器能繼續(xù)提供服務(wù),防止用戶的數(shù)據(jù)或業(yè)務(wù)請求被中斷。雙機(jī)熱備系統(tǒng)應(yīng)運(yùn)而生,并已成熟應(yīng)用,但現(xiàn)有的雙機(jī)熱備系統(tǒng)存在著或價格昂貴或易發(fā)生負(fù)載失衡的狀況,因此本文設(shè)計了一種簡便的雙機(jī)熱備份的狀態(tài)機(jī),該狀態(tài)機(jī)實現(xiàn)在一臺獨(dú)立的控制器上,并給出備份實現(xiàn)流程。
現(xiàn)有雙機(jī)備份技術(shù)主要包括兩種:一是基于存儲器(磁盤陣列)方式,其存儲方式為共享存儲或全冗余(雙機(jī)雙存儲),將用戶數(shù)據(jù)放在存儲設(shè)備即磁盤陣列上,主備服務(wù)器通過磁盤陣列共享數(shù)據(jù),如圖1所示。二是復(fù)制方式,僅選用主備兩臺服務(wù)器,采用鏡像軟件將數(shù)據(jù)從一臺服務(wù)器實時的復(fù)制到另一臺服務(wù)器,保障兩臺服務(wù)器間的數(shù)據(jù)一致性,發(fā)生故障時進(jìn)行服務(wù)器的切換,如圖2所示。
針對于磁盤陣列方式,共享存儲器的價格昂貴,適用范圍小。針對于復(fù)制方式,當(dāng)主備服務(wù)器所構(gòu)成的雙機(jī)服務(wù)系統(tǒng)出現(xiàn)故障時,不易判斷故障狀態(tài),需要提供額外的狀態(tài)監(jiān)測工作,并針對故障情況制定解決方案;當(dāng)心跳線出現(xiàn)故障時,主備服務(wù)器將同時進(jìn)入工作狀態(tài),可能造成系統(tǒng)服務(wù)混亂;沒有提供仲裁機(jī)制,不能在主備服務(wù)器間進(jìn)行負(fù)載均衡,主服務(wù)器的性能容易成為服務(wù)系統(tǒng)的瓶頸。
本文針對現(xiàn)有問題及諸多學(xué)者提出的解決方案進(jìn)行了研究,如:基于開源項目OpenSAF的雙機(jī)熱備系統(tǒng)已經(jīng)針對現(xiàn)有的共享存儲的硬件備份、非共享存儲的軟件備份等存在的問題提出了解決方案,其有效的減少了數(shù)據(jù)備份時間,但依賴于OpenSAF。基于MySQL二進(jìn)制日志(Binlog)進(jìn)行SQL還原的研究,提出了分布式異構(gòu)數(shù)據(jù)庫間數(shù)據(jù)同步的解決方案及工具設(shè)計,其研究成果可用于解決異構(gòu)數(shù)據(jù)庫間數(shù)據(jù)同步中存在的數(shù)據(jù)格式不匹配、同步速度不匹配等問題,但應(yīng)用成果局限于異構(gòu)數(shù)據(jù)庫。
本文意在解決傳統(tǒng)雙機(jī)熱備方案中易出現(xiàn)的控制無序、不穩(wěn)定、高成本的問題,給出一種易于控制、經(jīng)濟(jì)且實現(xiàn)簡單的設(shè)計方案,依賴兩臺普通服務(wù)器和一臺控制機(jī)實現(xiàn)服務(wù)器系統(tǒng)。
在傳統(tǒng)雙機(jī)服務(wù)器系統(tǒng)基礎(chǔ)上,本文在客戶端、雙機(jī)服務(wù)器間增加了控制器,我們將兩臺互為備份的服務(wù)器稱為服務(wù)器1、服務(wù)器2.
圖1:基于共享存儲的雙機(jī)熱備
圖2:基于復(fù)制方式的雙機(jī)熱備
圖3:基于控制器的雙機(jī)服務(wù)系統(tǒng)架構(gòu)
客戶端通過控制器與服務(wù)器進(jìn)行數(shù)據(jù)通信,控制器接收到客戶端數(shù)據(jù)讀操作請求后,根據(jù)服務(wù)器1、服務(wù)器2的運(yùn)行狀態(tài)及負(fù)載狀態(tài)進(jìn)行仲裁,仲裁后分配同步運(yùn)行的服務(wù)器中低負(fù)載的服務(wù)器提供服務(wù),并由控制器返回應(yīng)答信息,可有效的避免負(fù)載不均衡造成的服務(wù)瓶頸。整個過程中控制器、雙主機(jī)對客戶端提供透明服務(wù),客戶端無需了解服務(wù)細(xì)節(jié)及仲裁過程,該方法簡便且保障了業(yè)務(wù)系統(tǒng)穩(wěn)定運(yùn)行。
在無控制器的雙機(jī)雙機(jī)服務(wù)系統(tǒng)中,若服務(wù)器間心跳線出現(xiàn)故障,則主備服務(wù)器將同時進(jìn)入工作狀態(tài),可能造成系統(tǒng)服務(wù)混亂。本文所增加的控制器通過查詢方式定時獲取服務(wù)器1和服務(wù)器2的狀態(tài),并接收服務(wù)器返回的操作結(jié)果。定時讀取服務(wù)器同步狀態(tài),在心跳線出現(xiàn)故障時依靠控制器即可判斷出服務(wù)器的運(yùn)行狀態(tài),不受心跳線故障的影響,認(rèn)可提供穩(wěn)定服務(wù)。
同時,在控制器中維護(hù)主備服務(wù)器仲裁狀態(tài)機(jī),在圖3中給出的即是控制機(jī)、服務(wù)器1、服務(wù)器2構(gòu)成的雙主機(jī)服務(wù)器系統(tǒng)。
通過有限狀態(tài)機(jī)建立的數(shù)學(xué)模型,可解決數(shù)字系統(tǒng)設(shè)計中的輸入、輸出等邏輯問題的處理。本文對有限狀態(tài)機(jī)在建立數(shù)學(xué)模型時的多種場景應(yīng)用進(jìn)行了研究,對已有成果中建模方法、模型求解等方面進(jìn)行了分析,結(jié)合本研究方向所面臨的問題進(jìn)行了深入研究,建立了雙機(jī)服務(wù)器備份時的仲裁狀態(tài)機(jī)。
圖4中所示的是本文所設(shè)計的主備服務(wù)器仲裁狀態(tài)機(jī),根據(jù)對雙機(jī)服務(wù)器系統(tǒng)的特點分析可知:
狀態(tài)機(jī)有三個臨時態(tài)——上電初始化、實時備份、批量備份;
三個穩(wěn)定態(tài)——單服務(wù)器態(tài)、主備同步、主備異步;
有八個輸入——單服務(wù)器在線、備服務(wù)器上線、批量同步成功、批量同步失敗、服務(wù)器離線、實時同步、實時同步成功、實時同步失敗。
將服務(wù)器當(dāng)前穩(wěn)定態(tài)、同步狀態(tài)等約束條件作為輸入信號,以此驅(qū)動狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移,實現(xiàn)雙機(jī)服務(wù)器同步狀態(tài)的自動控制。
具體設(shè)計如下:
控制器上電后進(jìn)入上電初始化態(tài)時,主要存在兩種場景——服務(wù)器已上線、服務(wù)器未上線;接收的“單服務(wù)器在線”輸入有兩種來源——在初始化時指定的主服務(wù)器上報;或根據(jù)服務(wù)器上線時間進(jìn)行主備服務(wù)器的選擇,先上線的服務(wù)器為主服務(wù)器。
單服務(wù)器態(tài)時,客戶端所有的操作均通過控制器直接發(fā)送給該服務(wù)器。
控制器收到客戶端的數(shù)據(jù)修改和寫請求時,基于服務(wù)器的角色發(fā)送給主服務(wù)器,在成功響應(yīng)請求后將數(shù)據(jù)備份給備服務(wù)器,并根據(jù)服務(wù)器返回的消息運(yùn)轉(zhuǎn)狀態(tài)機(jī),此為數(shù)據(jù)的實時備份。
當(dāng)單服務(wù)器掉線后重新上線時,控制器觸發(fā)主服務(wù)器向新上線備份服務(wù)器的數(shù)據(jù)發(fā)送,并根據(jù)服務(wù)器返回的消息運(yùn)轉(zhuǎn)狀態(tài)機(jī),此為數(shù)據(jù)的批量備份。
圖4:主備服務(wù)器仲裁狀態(tài)機(jī)
在收到客戶端的查詢請求時,如果服務(wù)器系統(tǒng)處于“主備同步狀態(tài)”,控制器可根據(jù)主備服務(wù)器的負(fù)載情況,決定向哪個服務(wù)器發(fā)送數(shù)據(jù)查詢的請求。
如果服務(wù)器系統(tǒng)處于“主備異步狀態(tài)”,則由主服務(wù)器響應(yīng)客戶端的查詢請求。
本文立足解決傳統(tǒng)雙機(jī)服務(wù)器易發(fā)生的可控性、穩(wěn)定性等問題,在原有雙機(jī)服務(wù)器的基礎(chǔ)上增加控制器,與服務(wù)器1、服務(wù)器2共同構(gòu)成雙主機(jī)服務(wù)器系統(tǒng),實現(xiàn)對雙主機(jī)服務(wù)器系統(tǒng)的控制,可實時了解服務(wù)器運(yùn)行狀態(tài)及數(shù)據(jù)同步情況、根據(jù)雙機(jī)負(fù)載情況分發(fā)客戶端請求。同時所設(shè)計了主備服務(wù)器仲裁狀態(tài)機(jī),通過輸入實現(xiàn)對主備服務(wù)器臨時態(tài)、穩(wěn)定態(tài)間的切換,實現(xiàn)對雙機(jī)服務(wù)器運(yùn)行狀況的標(biāo)準(zhǔn)化仲裁。雙機(jī)服務(wù)系統(tǒng)在提供業(yè)務(wù)穩(wěn)定運(yùn)行中實用性強(qiáng),因此具有進(jìn)行深入研究的價值。