吳亞鳳(1975-)女,陜西渭南人,碩士,中國勞動關系學院基礎部講師,主要從事應用數(shù)學方面的研究。
摘要:本文分析了目前工業(yè)計算機控制系統(tǒng)中服務器冗余控制存在的問題,提出一種高可靠的服務器冗余控制算法模型,并給出了該算法的詳細內(nèi)容及其實現(xiàn)。
關鍵詞:計算機控制;服務器;冗余控制;算法模型
Abstract: This paper analyzes server redundant control problems in industrial computer control system. It presents a highly reliable algorithmic model for the servers’ redundant control. Moreover, it analyzes the detailed content of the algorithm, and describes its realization.
Key words: Computer Control; Server; Redundancy; Algorithmic Model
1 問題的提出
在工業(yè)計算機控制應用領域,為了提高系統(tǒng)的可靠性以及可用性,經(jīng)常采用冗余服務器架構,即設置兩臺互為冗余的服務器,工作在一用一備模式下,為網(wǎng)絡上的其他節(jié)點提供各類數(shù)據(jù)服務,并且常常設置冗余網(wǎng)絡,進一步提高系統(tǒng)的可用性。可以實現(xiàn)當存在單個服務器節(jié)點故障或者單個網(wǎng)絡故障時,系統(tǒng)的可用性不降低。系統(tǒng)結構如圖1所示[1]。
這樣的系統(tǒng)結構一般都會存在如下幾個問題,難于解決:
(1)服務器A、B機的主從控制機制復雜,常會出現(xiàn)“雙主”、“雙從”或者來回切換(“打乒乓球”現(xiàn)象),使得系統(tǒng)可靠性降低。為了解決這個問題,有些系統(tǒng)采用硬件方式給兩臺服務器之間設置硬件切換電路板,保證不出現(xiàn)這個問題,但又存在成本以及切換電路可靠性的問題;
(2)兩臺服務器的數(shù)據(jù)同步是冗余控制的難點,特別是在雙機進行各種狀態(tài)轉(zhuǎn)換(主機、從機、單機、故障/停機)過程中發(fā)生的數(shù)據(jù)更新或者來自操作站的控制命令時,如何保證雙機數(shù)據(jù)嚴格的一致性以及不丟失數(shù)據(jù)是非常困難的;
(3)系統(tǒng)雙網(wǎng)絡結構使得某些情況下難于控制,如兩臺服務器的交叉網(wǎng)絡故障,使得雙機互不能訪問對方,從而造成系統(tǒng)不可用[2]。
2 冗余控制模型
本文提出一種基于圖1的改良網(wǎng)絡模型,在兩個服務器上各增加一塊以太網(wǎng)卡,形成第三條網(wǎng)絡(如圖2所示),通過合適的控制算法,使其達到準確檢測、正確切換、無擾控制、不丟數(shù)據(jù)的目的,以滿足工業(yè)控制場合高可靠性與高可用性要求。
該冗余控制模型如圖3所示,自下到上依次是狀態(tài)診斷、主從控制、數(shù)據(jù)服務以及冗余控制四層結構,下層為上層提供服務,上層的執(zhí)行依賴于下層的運算結果。
它們的功能如下:
狀態(tài)診斷:為服務器提供自己和對方準確的網(wǎng)絡以及關鍵進程狀態(tài);
主從控制:根據(jù)自己和對方的狀態(tài),按照服務器切換狀態(tài)機進行主從切換;
數(shù)據(jù)服務:客戶機向服務器進行數(shù)據(jù)請求,以及服務器的數(shù)據(jù)服務過程;
冗余控制:兩臺服務器之間的數(shù)據(jù)同步過程。
3 服務器的狀態(tài)診斷
服務器狀態(tài)監(jiān)測包括自我監(jiān)測、狀態(tài)廣播、監(jiān)聽對方、監(jiān)聽客戶機四個部分。服務器監(jiān)測自己的三個網(wǎng)絡的好壞、監(jiān)測自身關鍵進程的運行狀態(tài),并將這些狀態(tài)填入自身狀態(tài)字中,然后將自身狀態(tài)字通過全部網(wǎng)卡廣播出去;并一直監(jiān)視來自對方服務器的廣播信息包以及來自其他客戶機的異常監(jiān)聽反饋,根據(jù)它們來填充自己狀態(tài)字、計算對方服務器的狀態(tài),并作為服務器主從控制模塊的輸入。
作為客戶機,一般情況下,它只監(jiān)聽來自兩臺服務器的廣播信息,只有在以下幾種異常情況下,它才給予回復,用于通知兩臺服務器。
(1)兩臺服務器均聲稱自己看不見對方;
(2)兩臺服務器運行狀態(tài)沖突(將雙主、雙從、雙單機三種情況均視為沖突)。
對于第一種情況,這是因為兩臺服務器之間的網(wǎng)絡存在交叉故障問題,兩臺服務器之間失去了聯(lián)系;第二種情況在系統(tǒng)被割裂為獨立的兩個子系統(tǒng)并在恢復的瞬間會出現(xiàn),以及為了防止程序BUG等意外情況所做的容錯設計。客戶機回復狀態(tài)字如圖5所示。
由以上的過程,可以對兩臺服務器關鍵進程、各自的網(wǎng)絡、客戶機網(wǎng)絡做出準確的判斷,只要當系統(tǒng)被割裂為完全獨立的兩個子系統(tǒng)時,系統(tǒng)的運行模式轉(zhuǎn)為兩個獨立系統(tǒng),如圖6所示。
只有當兩個服務器的NETA和B交叉故障、NETC故障、每臺客戶機均有一個網(wǎng)絡故障的情況下,才會出現(xiàn)被割裂為完全獨立的兩個子系統(tǒng)的情況。但是故障恢復后,系統(tǒng)可以進行數(shù)據(jù)的合并,保證不丟失數(shù)據(jù)。
4 服務器的主從控制
服務器的狀態(tài)有四種:主機、備用機、故障、單機模式。主機就是該服務器在兩臺冗余的服務器中起著主導地位,處于工作模式,則另外一臺服務器一定也是運行狀態(tài),并且處于備用狀態(tài)(備用機)或者故障狀態(tài);單機模式就是網(wǎng)絡中只存在一臺服務器處于運行狀態(tài),是獨立運行的。這四種狀態(tài)是隨著網(wǎng)絡狀態(tài)、服務器關鍵進程狀態(tài)、服務器的配置等情況的不同而動態(tài)變化的。
服務器的主從切換控制就是控制自己的運行狀態(tài)在上述這四種狀態(tài)中動態(tài)切換,它是在服務器狀態(tài)診斷的基礎上執(zhí)行的,并且兩臺服務器的狀態(tài)切換是獨立進行的,切換按照圖7所示的服務器狀態(tài)機進行。
服務器狀態(tài)機中的轉(zhuǎn)換條件如表1,表中轉(zhuǎn)換前狀態(tài)以及轉(zhuǎn)換后狀態(tài)請參考圖7。
表1 服務器狀態(tài)機轉(zhuǎn)換條件:
服務器各自對自身的狀態(tài)進行計算與控制,還需要將其狀態(tài)回填至圖4所示的狀態(tài)字中,以使得網(wǎng)絡上其他節(jié)點獲得該信息。
5 系統(tǒng)數(shù)據(jù)服務
服務器向網(wǎng)絡上的客戶機提供各類數(shù)據(jù)服務,包括為客戶機發(fā)布數(shù)據(jù)(或者服務器的控制命令輸出)和接收客戶機的命令消息(或者服務器的數(shù)據(jù)更新),這兩類數(shù)據(jù)服務從服務器的角度看就是輸出數(shù)據(jù)和輸入數(shù)據(jù)。對于輸出數(shù)據(jù),僅由主機(單機)對外提供;對于輸入數(shù)據(jù),則服務器處于任何狀態(tài)下均要處理。其消息傳遞模型如圖8所示。
作為客戶機而言,它向服務器請求數(shù)據(jù)或者發(fā)送命令時,需要同時向兩臺服務器發(fā)送,并給消息進行編號;接收數(shù)據(jù)時,僅接收主機(或者單機)服務器的數(shù)據(jù)。
服務器處理數(shù)據(jù)時,需要記錄已經(jīng)處理的消息的編號或者處理動作計數(shù)器,以便后續(xù)數(shù)據(jù)冗余同步控制的執(zhí)行。
6 數(shù)據(jù)冗余控制
服務器的冗余控制是為了保證兩臺服務器上的數(shù)據(jù)的一致性、完整性。其手段是同步控制,即保證兩臺服務器上的數(shù)據(jù)的源頭一致,處理步調(diào)一致,以達到其數(shù)據(jù)的完全一致。
服務器要處理的數(shù)據(jù)根據(jù)數(shù)據(jù)源以及對數(shù)據(jù)加工需求的不同可以分為如下幾類:(1)僅從外部數(shù)據(jù)源獲取數(shù)據(jù),并更新本機的數(shù)據(jù);(2)僅為外部需求者提供數(shù)據(jù);(3)根據(jù)外部需求做出動作;(4)與外部無關的數(shù)據(jù)處理過程。對于不同類型的數(shù)據(jù)處理,其冗余控制不同。對于1、3類,需要冗余同步;對于2、4類,不需要冗余同步控制。
數(shù)據(jù)冗余同步分為兩種:全部同步、增量同步。全部同步是將主機上的數(shù)據(jù)庫全部復制至備用機,用于服務器由故障、單機轉(zhuǎn)為備用機和備用機啟動過程中;增量同步是將主機上的部分數(shù)據(jù)復制至備用機,用于雙機正常工作中的主機為從機同步過程中。
全部同步處理比較簡單;增量同步比較復雜,需要記錄哪些內(nèi)容需要同步以及做哪些數(shù)據(jù)備份等。雙機在工作過程中,各自維護一個數(shù)據(jù)處理ID堆棧和計數(shù)器堆棧,主機定周期的通知從機自己處理的ID和計數(shù)器,從機檢查自己的處理是否與其一致,如不一致,則向主機發(fā)出數(shù)據(jù)備份請求,主機再向從機發(fā)出備份數(shù)據(jù),并矯正數(shù)據(jù)處理ID和計數(shù)器堆棧,完成一次增量同步過程,如圖9所示。
7 小結
該冗余算法設計采用分層模式,結構清晰明了,層間耦合度小,易于實現(xiàn)[3]。已經(jīng)在SCADA系統(tǒng)中實現(xiàn)并得以驗證,有較高的可靠性,并提高系統(tǒng)的可用性,能較好的解決工業(yè)計算機控制系統(tǒng)的服務器冗余問題。
參考文獻:
[1] 王常力等. 分布式控制系統(tǒng)(DCS)設計與應用實例[M]. 北京: 電子工業(yè)出版社, 2004. 22~31.
[2] 夏士兵等. 變電站SCADA系統(tǒng)雙服務器無擾動切換算法[J]. 電力系統(tǒng)自動化, 2006, 30(14): 58~60.
[3] 柯奈漢等. 程序設計實踐[M]. 北京: 機械工業(yè)出版社, 2000. 23~65.
摘自《自動化博覽》2010年第十二期