本發(fā)明屬于主從設(shè)備工作領(lǐng)域,尤其涉及到一種基于TCP事件的多服務(wù)器主從機(jī)工作方法。
背景技術(shù):
現(xiàn)在很多項(xiàng)目對(duì)系統(tǒng)穩(wěn)定性及性能效率要求較高,在系統(tǒng)設(shè)置中,通常只設(shè)置一個(gè)服務(wù)器。一旦該服務(wù)器出現(xiàn)故障,由于無備用服務(wù)器,或者由于備用服務(wù)器數(shù)據(jù)不與原服務(wù)器同步,造成系統(tǒng)無法正常運(yùn)行。即使想要實(shí)現(xiàn)增量數(shù)據(jù)同步的功能還需要其他多種工具配合,造成成本增加。
技術(shù)實(shí)現(xiàn)要素:
為解決上述問題,本發(fā)明提供了一種基于TCP事件的多服務(wù)器主從機(jī)工作方法,包括如下步驟:
步驟一:預(yù)先建立一個(gè)系統(tǒng),該系統(tǒng)包括若干臺(tái)具有相同功能的服務(wù)器、若干具有通信功能的電子設(shè)備,由epoll對(duì)系統(tǒng)的TCP事件進(jìn)行管理,并預(yù)先在每個(gè)服務(wù)器內(nèi)定義三個(gè)TCP事件:檢測從機(jī)事件、增量數(shù)據(jù)同步事件、檢測主機(jī)事件。
所述檢測從機(jī)事件用于主機(jī)定時(shí)監(jiān)測各個(gè)從機(jī)是否在線,當(dāng)從機(jī)在線時(shí)則與從機(jī)建立TCP異步非阻塞連接, 之后將該連接交給epoll管理。
所述增量數(shù)據(jù)同步事件用于主機(jī)將增量數(shù)據(jù)同步到在線的從機(jī)。
所述檢測主機(jī)事件用于從機(jī)對(duì)主機(jī)在線狀態(tài)進(jìn)行定時(shí)監(jiān)測。
步驟二:各個(gè)服務(wù)器啟動(dòng),各個(gè)服務(wù)器具有優(yōu)先級(jí)排序。
步驟三:將在線的、優(yōu)先級(jí)最高的服務(wù)器作為主機(jī),其余的服務(wù)器作為從機(jī),所述主機(jī)與各個(gè)從機(jī)及各個(gè)具有通信功能的電子設(shè)備建立通信連接。
步驟四:主機(jī)運(yùn)行檢測從機(jī)事件,定時(shí)監(jiān)控各個(gè)從機(jī)在線狀態(tài),當(dāng)從機(jī)在線時(shí),則啟動(dòng)增量數(shù)據(jù)同步事件,將主機(jī)與系統(tǒng)內(nèi)其他具有通信功能的電子設(shè)備的通信數(shù)據(jù)增量同步到從機(jī)中。
從機(jī)運(yùn)行檢測主機(jī)事件,定時(shí)監(jiān)控主機(jī)在線狀態(tài),如在線,則繼續(xù)作為從機(jī)工作,不執(zhí)行步驟五;如不在線,優(yōu)先級(jí)別最高的從機(jī)躍遷為新的主機(jī),并與其它從機(jī)建立起通信,將其它從機(jī)作為自己的從機(jī),并執(zhí)行步驟五。
步驟五:新的主機(jī)向系統(tǒng)內(nèi)的具有通信功能的電子設(shè)備發(fā)布躍遷信號(hào),表明自己的主機(jī)身份,并重置檢測從機(jī)事件、增量數(shù)據(jù)同步事件、檢測主機(jī)事件。
步驟六:循環(huán)執(zhí)行步驟三-步驟五,直到系統(tǒng)停止工作。
進(jìn)一步的,步驟四中,定時(shí)監(jiān)測的具體實(shí)現(xiàn)方式是:利用rb_tree實(shí)現(xiàn)定時(shí)監(jiān)控,系統(tǒng)將各個(gè)主機(jī)執(zhí)行檢測從機(jī)事件的事件及從機(jī)執(zhí)行檢測主機(jī)事件的時(shí)間信息注入到 rb_tree的各個(gè)節(jié)點(diǎn),由epoll_wait的時(shí)間機(jī)制來遍歷rb_tree,以定時(shí)執(zhí)行監(jiān)測。
進(jìn)一步的,所述服務(wù)器具有兩個(gè)。
進(jìn)一步的,根據(jù)完成啟動(dòng)的時(shí)間先后對(duì)各個(gè)服務(wù)器設(shè)備進(jìn)行優(yōu)先級(jí)別從高到低的排序。
進(jìn)一步的,檢測從機(jī)事件的具體執(zhí)行方法為:由主機(jī)發(fā)起與從機(jī)建立TCP異步非阻塞連接, 之后將連接交給epoll管理,若連接不成功或連接中斷則epoll會(huì)感知到連接失敗事件,這時(shí)主機(jī)就會(huì)判斷從機(jī)為不在線狀態(tài),否則從機(jī)為在線狀態(tài)。
進(jìn)一步的,增量數(shù)據(jù)同步事件執(zhí)行的具體流程為:主機(jī)發(fā)起與從機(jī)建立TCP異步非阻塞連接,并初始化與之對(duì)應(yīng)的一個(gè)內(nèi)存塊,之后將連接交給epoll管理,epoll可感知該連接的可讀事件,若此時(shí)內(nèi)存塊中有增量數(shù)據(jù),則epoll會(huì)將數(shù)據(jù)異步的通過該連接同步到從機(jī)。
進(jìn)一步的,檢測主機(jī)事件執(zhí)行的具體流程為:由從機(jī)發(fā)起與主機(jī)建立TCP異步非阻塞連接, 之后將連接交給epoll管理。若連接不成功或連接中斷則epoll會(huì)感知到連接失敗事件,這時(shí)從機(jī)就會(huì)判斷主機(jī)為不在線狀態(tài),否則主機(jī)為在線狀態(tài)。
進(jìn)一步的,步驟四中,優(yōu)先級(jí)別最高的從機(jī)躍遷為新的主機(jī)后,如果步驟三中作為主機(jī)的服務(wù)器恢復(fù)在線狀態(tài),該服務(wù)器作為從機(jī)作為與新的主機(jī)建立通信連接。
本發(fā)明的有益效果為:
1.使用I/O多路復(fù)用模型epoll管理TCP事件,效率高、易于實(shí)現(xiàn)。
2. 增量數(shù)據(jù)同步事件能夠進(jìn)行主機(jī)和從機(jī)之間的增量數(shù)據(jù)同步,滿足服務(wù)器之間互相替代的要求。
3.從機(jī)到主機(jī)的躍遷過程簡單,只需發(fā)布躍遷信息和重置維護(hù)TCP事件即可。
4.全程自動(dòng)化,節(jié)約人力物力。
具體實(shí)施方式:
本發(fā)明的設(shè)計(jì)構(gòu)思為:在對(duì)性能效率及穩(wěn)定性要求較高的系統(tǒng)中,布置兩個(gè)及兩個(gè)以上的服務(wù)器,各個(gè)服務(wù)器配置相同,增量數(shù)據(jù)同步,能夠互相替代進(jìn)行系統(tǒng)內(nèi)的工作。同一時(shí)刻只有一個(gè)服務(wù)器作為主機(jī)(即后述的master),其余服務(wù)器則作為從機(jī)(即后述的slave),從機(jī)與主機(jī)增量數(shù)據(jù)同步,在主機(jī)無法正常工作時(shí),系統(tǒng)選定優(yōu)先級(jí)別最高的從機(jī)作為新的主機(jī)。
下面對(duì)技術(shù)方案進(jìn)行詳細(xì)說明。
在本發(fā)明所述系統(tǒng)中,包含兩個(gè)或兩個(gè)以上的服務(wù)器,各個(gè)服務(wù)器的配置無差別,且含有相同的功能(關(guān)鍵系統(tǒng)模塊無差別的部署)。使用I/O多路復(fù)用模型epoll,通過epoll異步管理TCP事件的特性,來實(shí)現(xiàn)主從設(shè)備之間定時(shí)監(jiān)測在線狀態(tài)和增量數(shù)據(jù)同步的功能。
下面對(duì)本系統(tǒng)的工作方法進(jìn)行詳細(xì)說明。
步驟一:預(yù)先建立一個(gè)系統(tǒng),該系統(tǒng)包括若干臺(tái)具有相同功能的服務(wù)器、若干具有通信功能的電子設(shè)備,由epoll對(duì)系統(tǒng)的TCP事件進(jìn)行管理。
所述系統(tǒng)由epoll對(duì)系統(tǒng)TCP事件進(jìn)行管理,并預(yù)先在每個(gè)服務(wù)器內(nèi)定義三個(gè)TCP事件:檢測從機(jī)事件(check_slave_event)、增量數(shù)據(jù)同步事件(data_sync_event)、檢測主機(jī)事件(check_master_event)。
check_slave_event 為master監(jiān)測slave在線狀態(tài)事件。由master發(fā)起與slave建立TCP異步非阻塞連接, 之后將連接交給epoll管理。若連接不成功或連接中斷則epoll會(huì)感知到連接失敗事件,這時(shí)master就會(huì)判斷slave為不在線狀態(tài),否則slave為在線狀態(tài)。將上述流程加入定時(shí)樹中(定時(shí)樹由rb_tree實(shí)現(xiàn),這里不做詳述),由epoll_wait的時(shí)間機(jī)制來遍歷定時(shí)樹,定時(shí)執(zhí)行上述流程,達(dá)到定時(shí)監(jiān)測的效果。
data_sync_event為master增量數(shù)據(jù)同步到slave事件。data_sync_event依賴于check_slave_event監(jiān)測到slave的在線狀態(tài),若slave在線,則由master發(fā)起與slave建立TCP異步非阻塞連接,并初始化與之對(duì)應(yīng)的一個(gè)內(nèi)存塊,之后將連接交給epoll管理。epoll可感知該連接的可讀事件,這時(shí)若內(nèi)存塊中有增量數(shù)據(jù),則epoll會(huì)將數(shù)據(jù)異步的通過該連接同步到slave。所以當(dāng)master與其他系統(tǒng)模塊交互產(chǎn)生增量數(shù)據(jù)時(shí),把增量數(shù)據(jù)寫入內(nèi)存塊,epoll就會(huì)將數(shù)據(jù)發(fā)給slave。
check_master_event為slave監(jiān)測master在線狀態(tài)事件。由slave發(fā)起與master建立TCP異步非阻塞連接, 之后將連接交給epoll管理。若連接不成功或連接中斷則epoll會(huì)感知到連接失敗事件,這時(shí)slave就會(huì)判斷master為不在線狀態(tài),否則master為在線狀態(tài)。將上述流程加入定時(shí)樹中(定時(shí)樹由rb_tree實(shí)現(xiàn),即將預(yù)先設(shè)定的監(jiān)測時(shí)間點(diǎn)植入到rb_tree數(shù)的各個(gè)節(jié)點(diǎn)),由epoll_wait的時(shí)間機(jī)制來遍歷定時(shí)樹,定時(shí)執(zhí)行上述流程,達(dá)到定時(shí)監(jiān)測的效果。
其中,master維護(hù)兩個(gè)事件:check_slave_event和data_sync_event。只有當(dāng)check_slave_event監(jiān)測到slave在線時(shí)才有可能觸發(fā)data_sync_event事件。
slave維護(hù)一個(gè)事件:check_master_event。
步驟二:各個(gè)服務(wù)器設(shè)備啟動(dòng),各個(gè)服務(wù)器設(shè)備具有優(yōu)先級(jí)排序。
本步驟中,可以預(yù)先人工定義各個(gè)服務(wù)器設(shè)備的優(yōu)先級(jí)別。本發(fā)明是根據(jù)完成啟動(dòng)的時(shí)間先后對(duì)各個(gè)服務(wù)器設(shè)備進(jìn)行優(yōu)先級(jí)別的排序。一般來說,服務(wù)器啟動(dòng)時(shí)間會(huì)有先后之分,啟動(dòng)時(shí)間越短的說明性能越好,適合作為主機(jī)。
利用啟動(dòng)時(shí)間進(jìn)行優(yōu)先級(jí)的排序,進(jìn)一步實(shí)現(xiàn)了技術(shù)方案的全自動(dòng)化,節(jié)約了人力,且最大程度的提升了系統(tǒng)運(yùn)行的性能。
步驟三:將在線的、優(yōu)先級(jí)最高的服務(wù)器作為主機(jī),其余的服務(wù)器作為從機(jī),所述主機(jī)與各個(gè)從機(jī)及各個(gè)具有通信功能的電子設(shè)備建立通信連接。
在本發(fā)明中,主機(jī)具有兩個(gè)功能:1.與系統(tǒng)內(nèi)其他具有通信功能的電子設(shè)備建立通信連接,提供服務(wù);2.與各個(gè)從機(jī)通信,監(jiān)測從機(jī)在線狀態(tài),且無差別的將增量數(shù)據(jù)同步到各個(gè)從機(jī)。這樣設(shè)計(jì)的好處是使得從機(jī)能隨時(shí)替代主機(jī)完成相同的功能,實(shí)現(xiàn)無縫銜接。
步驟四:主機(jī)運(yùn)行檢測從機(jī)事件,定時(shí)監(jiān)控各個(gè)從機(jī)在線狀態(tài),當(dāng)從機(jī)在線時(shí),則啟動(dòng)增量數(shù)據(jù)同步事件,將主機(jī)與系統(tǒng)內(nèi)其他具有通信功能的電子設(shè)備的通信數(shù)據(jù)增量同步到從機(jī)中。
從機(jī)運(yùn)行檢測主機(jī)事件,定時(shí)監(jiān)控主機(jī)在線狀態(tài),如在線,則繼續(xù)作為從機(jī)工作,不執(zhí)行步驟五;如不在線,優(yōu)先級(jí)別最高的從機(jī)躍遷為新的主機(jī),并與其它從機(jī)建立起通信,將其它從機(jī)作為自己的從機(jī),并執(zhí)行步驟五。
進(jìn)一步的,如果新的主機(jī)已經(jīng)產(chǎn)生,并在正常運(yùn)行過程中,這時(shí)原來的主機(jī)即使故障恢復(fù),重新上線,則只能以從機(jī)身份運(yùn)行。這樣能使得系統(tǒng)運(yùn)行更加穩(wěn)定。
步驟五:新的主機(jī)向系統(tǒng)內(nèi)的具有通信功能的電子設(shè)備發(fā)布躍遷信號(hào),表明自己的主機(jī)身份,并重置檢測從機(jī)事件、增量數(shù)據(jù)同步事件、檢測主機(jī)事件。
當(dāng)check_master_event監(jiān)測到master不在線時(shí),在線的、優(yōu)先級(jí)最高的slave躍遷為master,并且向其他服務(wù)器及具有通信功能的電子設(shè)備發(fā)布從->主躍遷信息,然后重置維護(hù)兩個(gè)事件check_slave_event和data_sync_event。
步驟六:循環(huán)執(zhí)行步驟三-步驟五,直到系統(tǒng)停止工作。