本發(fā)明涉及云數據處理技術領域,尤其涉及一種集群服務器容災系統(tǒng)、方法和服務器節(jié)點。
背景技術:
容災機制是BOSS(Business&Operation Support System,業(yè)務運營支撐系統(tǒng))運營系統(tǒng)故障應急必備技術之一,容災機制按BOSS系統(tǒng)的計算架構不同而有所差異?,F有BOSS系統(tǒng),基于傳統(tǒng)的單服務器單/多進程(線程)計算架構,其容災方案按故障級別分為程序級和主機級容災機制。對于程序級容災,一般采用crontab(定期任務)按頻率監(jiān)控內存活動進程表,對于監(jiān)控到的異常停止進程,采用重啟進程的方案進行容災;對于主機級容災,在進程主機異常宕機時,采用HA切換的方式將進程切換到備用程序主機,并啟動該備用應急主機和進程,在可忍受時間內重啟進程,以繼續(xù)提供服務。
隨著集群計算技術的發(fā)展,基于集群的BOSS運營系統(tǒng)必然是取代現有單高性能主機的一種選擇,基于集群的BOSS運營系統(tǒng),為保護現有硬件投資,面臨著同時部署在少數高性能主機和大量普通機器的情形,其特點是AIX和LINUX異構程序系統(tǒng)共存、少數的高性能節(jié)點和大量的普通節(jié)點同時以計算云的形式提供服務。
由于集群云計算的特定是跨機器多節(jié)點同時參與計算,而現有集群計算平臺并未提供可靠的進程容錯機制,如何保證基于集群的BOSS運營系統(tǒng)的進程計算的穩(wěn)定性和避免主機節(jié)點實效對服務的影響,成為現有技術中亟待解決的技術問題之一。
技術實現要素:
本發(fā)明實施例提供一種集群服務器容災系統(tǒng)、方法和服務器節(jié)點,用以提供一種基于集群服務器的容災機制,保證集群服務器的運行穩(wěn)定性和服務可靠性。
本發(fā)明實施例提供一種集群服務器容災系統(tǒng),包括多個監(jiān)控節(jié)點和多個工作節(jié)點,其中:
所述監(jiān)控節(jié)點用于運行第一監(jiān)控進程,所述第一監(jiān)控進程按照預設的第一監(jiān)控頻率監(jiān)控存儲的監(jiān)控進程列表中的各監(jiān)控進程是否異常;以及在監(jiān)控到至少一個監(jiān)控進程異常時,執(zhí)行異常監(jiān)控進程恢復;以及所述第一監(jiān)控進程按照預設的第二頻率監(jiān)控存儲的工作進程列表中各工作進程是否異常;在監(jiān)控到至少一個工作進程異常時,執(zhí)行異常工作進程恢復;
所述工作節(jié)點用于運行工作進程,所述工作進程根據存儲的監(jiān)控進程列表按照所述第二監(jiān)控頻率向所述監(jiān)控進程列表中的各監(jiān)控進程上報自身的服務狀態(tài)。
所述監(jiān)控節(jié)點,具體用于在監(jiān)控到至少一個監(jiān)控進程異常時,通過所述第一監(jiān)控進程向監(jiān)控進程列表中的其它第二監(jiān)控進程發(fā)送運行狀態(tài)檢測消息,根據檢測結果記錄異常的監(jiān)控進程標識;確定記錄的異常監(jiān)控進程標識對應的監(jiān)控進程異常。
所述監(jiān)控節(jié)點,具體用于通過所述第一監(jiān)控進程根據監(jiān)控進程列表包含的各監(jiān)控進程對應的監(jiān)控進程序號由小到大的順序組成消息傳遞環(huán)鏈,并發(fā)起消息傳遞;如果在預設時長內未接收到傳遞的消息時,則確定監(jiān)控到至少一個監(jiān)控進程異常。
所述監(jiān)控節(jié)點,具體用于根據異常監(jiān)控進程的數量,通過所述第一監(jiān)控進程從集群服務器節(jié)點列表中選擇除監(jiān)控節(jié)點列表包含的監(jiān)控節(jié)點以外的、相應數量的工作節(jié)點分別創(chuàng)建一個監(jiān)控進程用于替換異常監(jiān)控進程;并通過所述第一監(jiān)控進程接收各新創(chuàng)建的監(jiān)控進程返回的監(jiān)控進程序號及其所在節(jié)點的節(jié) 點標識;根據接收到的監(jiān)控進程序號及節(jié)點標識分別更新監(jiān)控進程列表和監(jiān)控節(jié)點列表;并通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的監(jiān)控進程列表;以及通知工作進程列表中各工作進程更新其存儲的監(jiān)控進程列表。
所述監(jiān)控節(jié)點,具體用于通過所述第一監(jiān)控進程分別向被選擇出的工作節(jié)點運行的任一工作進程發(fā)送監(jiān)控進程創(chuàng)建請求;
所述被選擇出的工作節(jié)點,用于通過自身運行、接收到所述監(jiān)控進程創(chuàng)建請求的工作進程創(chuàng)建該工作進程的子進程,并向創(chuàng)建的子進程轉發(fā)所述監(jiān)控進程創(chuàng)建請求;所述子進程根據接收到的監(jiān)控進程創(chuàng)建請求,標識自身進程類別為監(jiān)控進程;并通過所述工作進程向所述第一監(jiān)控進程返回新創(chuàng)建監(jiān)控進程序號及所在節(jié)點的節(jié)點標識。
所述監(jiān)控節(jié)點,具體用于在監(jiān)控到至少一個工作進程異常時,通過所述第一監(jiān)控進程根據存儲的工作進程列表向各工作進程發(fā)送服務狀態(tài)檢測消息;根據檢測結果記錄異常的工作進程標識;確定記錄的異常工作進程標識對應的工作進程異常。
所述監(jiān)控節(jié)點,具體用于在確定出異常工作進程之后,通過所述第一監(jiān)控進程探測異常工作進程所在工作節(jié)點是否異常;并根據探測結果記錄異常的工作節(jié)點標識;根據異常工作進程的數量,從集群服務器節(jié)點列表中選擇除異常工作節(jié)點以外的、相應數量的節(jié)點分別創(chuàng)建一個工作進程用于替換異常工作進程;并通過所述第一監(jiān)控進程接收各新創(chuàng)建的工作進程返回的工作進程序號及其所在工作節(jié)點的工作節(jié)點標識;根據接收到的工作進程序號及工作節(jié)點標識分別更新存儲的工作進程列表和工作節(jié)點列表;并通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的工作進程列表;以及通知工作進程列表中各工作進程更新其存儲的工作進程列表。
所述監(jiān)控節(jié)點,具體用于通過所述第一監(jiān)控進程分別向被選擇出的節(jié)點運行的任一進程發(fā)送監(jiān)控進程創(chuàng)建請求;
所述被選擇的節(jié)點用于通過自身運行、接收到所述工作進程創(chuàng)建請求的進 程創(chuàng)建該進程的子進程,并向創(chuàng)建的子進程轉發(fā)所述工作進程創(chuàng)建請求;所述子進程根據接收到的工作進程創(chuàng)建請求,標識自身進程類別為工作進程;并通過接收到所述工作進程創(chuàng)建請求的進程向所述第一監(jiān)控進程返回新創(chuàng)建工作進程序號及所在節(jié)點的節(jié)點標識。
本發(fā)明實施例提供一種集群服務器容災方法,包括:
監(jiān)控節(jié)點通過自身運行的第一監(jiān)控進程分別按照預設的第一監(jiān)控頻率和第二監(jiān)控頻率監(jiān)控存儲的監(jiān)控進程列表中的各監(jiān)控進程和存儲的工作進程列表中各工作進程是否異常;
在監(jiān)控到至少一個監(jiān)控進程異常時,執(zhí)行異常監(jiān)控進程恢復;以及
在監(jiān)控到至少一個工作進程異常時,執(zhí)行異常工作進程恢復。
優(yōu)選地,按照以下過程確定至少一個監(jiān)控進程異常:
所述監(jiān)控節(jié)點在監(jiān)控到至少一個監(jiān)控進程異常時,通過所述第一監(jiān)控進程向監(jiān)控進程列表中的其它第二監(jiān)控進程發(fā)送運行狀態(tài)檢測消息;
根據檢測結果記錄異常的監(jiān)控進程標識;
確定記錄的異常監(jiān)控進程標識對應的監(jiān)控進程異常。
優(yōu)選地,按照以下方法確定監(jiān)控到至少一個監(jiān)控進程異常:
所述監(jiān)控節(jié)點通過所述第一監(jiān)控進程根據監(jiān)控進程列表包含的各監(jiān)控進程對應的監(jiān)控進程序號由小到大的順序組成消息傳遞環(huán)鏈,并發(fā)起消息傳遞;
如果在預設時長內未接收到傳遞的消息時,則確定監(jiān)控到至少一個監(jiān)控進程異常。
優(yōu)選地,按照以下過程執(zhí)行異常監(jiān)控進程恢復:
所述監(jiān)控節(jié)點根據異常監(jiān)控進程的數量,通過所述第一監(jiān)控進程從集群服務器節(jié)點列表中選擇除監(jiān)控節(jié)點列表包含的監(jiān)控節(jié)點以外的、相應數量的工作節(jié)點分別創(chuàng)建一個監(jiān)控進程用于替換異常監(jiān)控進程;并
通過所述第一監(jiān)控進程接收各新創(chuàng)建的監(jiān)控進程返回的監(jiān)控進程序號及其所在節(jié)點的節(jié)點標識;
根據接收到的監(jiān)控進程序號及節(jié)點標識分別更新監(jiān)控進程列表和監(jiān)控節(jié)點列表;
通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的監(jiān)控進程列表;以及
通知工作進程列表中各工作進程更新其存儲的監(jiān)控進程列表。
優(yōu)選地,按照以下過程確定至少一個工作進程異常:
所述監(jiān)控節(jié)點在監(jiān)控到至少一個工作進程異常時,通過所述第一監(jiān)控進程根據存儲的工作進程列表向各工作進程發(fā)送服務狀態(tài)檢測消息;
根據檢測結果記錄異常的工作進程標識;
確定記錄的異常工作進程標識對應的工作進程異常。
優(yōu)選地,按照以下過程執(zhí)行異常工作進程恢復:
所述監(jiān)控節(jié)點在確定出異常工作進程之后,通過所述第一監(jiān)控進程探測異常工作進程所在工作節(jié)點是否異常;并
根據探測結果記錄異常的工作節(jié)點標識;以及
根據異常工作進程的數量,從集群服務器節(jié)點列表中選擇除異常工作節(jié)點以外的、相應數量的節(jié)點分別創(chuàng)建一個工作進程用于替換異常工作進程;
所述監(jiān)控節(jié)點通過所述第一監(jiān)控進程接收各新創(chuàng)建的工作進程返回的工作進程序號及其所在工作節(jié)點的工作節(jié)點標識;
根據接收到的工作進程序號及工作節(jié)點標識分別更新存儲的工作進程列表和工作節(jié)點列表;并
通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的工作進程列表;以及
通知工作進程列表中各工作進程更新其存儲的工作進程列表。
本發(fā)明實施例提供一種服務器節(jié)點,包括:
監(jiān)控單元,用于通過運行于所述服務器節(jié)點的第一監(jiān)控進程分別按照預設的第一監(jiān)控頻率和第二監(jiān)控頻率監(jiān)控存儲的監(jiān)控進程列表中的各監(jiān)控進程和存儲的工作進程列表中各工作進程是否異常;
異常處理單元,用于在監(jiān)控到至少一個監(jiān)控進程異常時,執(zhí)行異常監(jiān)控進 程恢復;以及在監(jiān)控到至少一個工作進程異常時,執(zhí)行異常工作進程恢復。
所述監(jiān)控單元,具體用于在監(jiān)控到至少一個監(jiān)控進程異常時,通過所述第一監(jiān)控進程向監(jiān)控進程列表中的其它第二監(jiān)控進程發(fā)送運行狀態(tài)檢測消息;根據檢測結果記錄異常的監(jiān)控進程標識;確定記錄的異常監(jiān)控進程標識對應的監(jiān)控進程異常。
所述監(jiān)控單元,具體用于通過所述第一監(jiān)控進程根據監(jiān)控進程列表包含的各監(jiān)控進程對應的監(jiān)控進程序號由小到大的順序組成消息傳遞環(huán)鏈,并發(fā)起消息傳遞;如果在預設時長內未接收到傳遞的消息時,則確定監(jiān)控到至少一個監(jiān)控進程異常。
所述異常處理單元,包括:
第一選擇子單元,用于根據異常監(jiān)控進程的數量,通過所述第一監(jiān)控進程從集群服務器節(jié)點列表中選擇除監(jiān)控節(jié)點列表包含的監(jiān)控節(jié)點以外的、相應數量的工作節(jié)點分別創(chuàng)建一個監(jiān)控進程用于替換異常監(jiān)控進程;
第一接收子單元,用于通過所述第一監(jiān)控進程接收各新創(chuàng)建的監(jiān)控進程返回的監(jiān)控進程序號及其所在節(jié)點的節(jié)點標識;
第一更新子單元,用于根據接收到的監(jiān)控進程序號及節(jié)點標識分別更新監(jiān)控進程列表和監(jiān)控節(jié)點列表;
第一通知子單元,用于通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的監(jiān)控進程列表;以及通知工作進程列表中各工作進程更新其存儲的監(jiān)控進程列表。
所述監(jiān)控單元,具體用于在監(jiān)控到至少一個工作進程異常時,通過所述第一監(jiān)控進程根據存儲的工作進程列表向各工作進程發(fā)送服務狀態(tài)檢測消息;根據檢測結果記錄異常的工作進程標識;確定記錄的異常工作進程標識對應的工作進程異常。
所述異常處理單元,包括:
探測子單元,用于在確定出異常工作進程之后,通過所述第一監(jiān)控進程探測異常工作進程所在工作節(jié)點是否異常;并根據探測結果記錄異常的工作節(jié)點 標識;
第二選擇子單元,用于根據異常工作進程的數量,從集群服務器節(jié)點列表中選擇除異常工作節(jié)點以外的、相應數量的節(jié)點分別創(chuàng)建一個工作進程用于替換異常工作進程;
第二接收子單元,用于通過所述第一監(jiān)控進程接收各新創(chuàng)建的工作進程返回的工作進程序號及其所在工作節(jié)點的工作節(jié)點標識;
第二更新子單元,用于根據接收到的工作進程序號及工作節(jié)點標識分別更新存儲的工作進程列表和工作節(jié)點列表;
第二通知子單元,用于通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的工作進程列表;以及通知工作進程列表中各工作進程更新其存儲的工作進程列表。
本發(fā)明實施例提供的集群服務器容災系統(tǒng)、方法和服務器節(jié)點,監(jiān)控節(jié)點通過自身運行的第一監(jiān)控進程按照第一監(jiān)控頻率監(jiān)控自身存儲的監(jiān)控進程列表中的每一監(jiān)控進程是否發(fā)生異常,以及按照第二監(jiān)控頻率監(jiān)控自身存儲的工作進程列表中的各共組進程是否發(fā)生異常,以及在監(jiān)控到至少一個監(jiān)控進程異常時,執(zhí)行監(jiān)控進程恢復,在監(jiān)控到至少一個工作進程異常時,執(zhí)行工作進程恢復,通過上述過程,實現了集群服務器的異常監(jiān)控及恢復,保證了集群服務器的運行穩(wěn)定性和服務可靠性。
本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在所寫的說明書、權利要求書、以及附圖中所特別指出的結構來實現和獲得。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本發(fā)明的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
圖1為本發(fā)明實施例中,集群服務器容災系統(tǒng)的結構示意圖;
圖2為本發(fā)明實施例中,監(jiān)控進程和工作進程的消息傳遞示意圖;
圖3為本發(fā)明實施例中,集群服務器初始化流程示意圖;
圖4為本發(fā)明實施例中,工作進程進行服務狀態(tài)檢測及發(fā)現異常工作進程時進行工作進程恢復的實施流程示意圖;
圖5為本發(fā)明實施例中,集群服務器容災方法的實施流程示意圖;
圖6為本發(fā)明實施例中,確定至少一個監(jiān)控進程異常的實施流程示意圖;
圖7為本發(fā)明實施例中,確定監(jiān)控到至少一個監(jiān)控進程異常的實施流程示意圖;
圖8為本發(fā)明實施例中,執(zhí)行異常監(jiān)控進程恢復的實施流程示意圖;
圖9為本發(fā)明實施例中,確定至少一個工作進程異常的實施流程示意圖;
圖10為本發(fā)明實施例中,執(zhí)行異常工作進程恢復的實施流程示意圖;
圖11為本發(fā)明實施例中,服務器節(jié)點的結構示意圖。
具體實施方式
為了提供一種基于集群服務器的容災機制,保證集群服務器的運行穩(wěn)定性和服務可靠性,本發(fā)明實施例提供了一種集群服務器容災系統(tǒng)、方法和服務器節(jié)點。
以下結合說明書附圖對本發(fā)明的優(yōu)選實施例進行說明,應當理解,此處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明,并且在不沖突的情況下,本發(fā)明中的實施例及實施例中的特征可以相互組合。
如圖1所示,為本發(fā)明實施例提供的集群服務器容災系統(tǒng)的結構示意圖。較佳的,具體實施時,可以將集群服務器包含的每一服務器節(jié)點按照節(jié)點性能(如可以為節(jié)點的計算能力)從高到低進行排列,建立服務器節(jié)點列表,在此基礎上,建立兩個節(jié)點列表,分別為:監(jiān)控節(jié)點列表和工作節(jié)點列表。其中,可以從服務器節(jié)點列表中依次選擇M(M為大于等于1的正整數)個服務器節(jié)點作為監(jiān)控節(jié)點,將所有的服務器節(jié)點添加至工作節(jié)點列表中作為工作節(jié)點。 當集群服務器系統(tǒng)運行后,對于在監(jiān)控節(jié)點列表的服務器節(jié)點創(chuàng)建1個監(jiān)控進程,對于在工作節(jié)點列表中的服務器節(jié)點創(chuàng)建1個或者多個工作進程。這樣,在監(jiān)控節(jié)點列表中的服務器節(jié)點將僅運行一個監(jiān)控進程,而在工作節(jié)點列表中的服務器節(jié)點將至少運行一個工作進程,還有部分服務器節(jié)點其既在監(jiān)控節(jié)點列表中又在工作節(jié)點列表中,其將運行一個監(jiān)控進程和至少一個工作進程。
本發(fā)明實施例提供的集群服務器容災系統(tǒng)的工作原理如下:集群服務器系統(tǒng)運行后,將運行進程劃分為監(jiān)控進程組和工作進程組,其中,監(jiān)控進程組的監(jiān)控進程按指定頻率監(jiān)控工作進程組的工作進程運行狀態(tài)和服務狀態(tài),同時監(jiān)控其它監(jiān)控進程的運行狀態(tài),計算進程組的進程負責業(yè)務邏輯處理,并保存當前任務列表,按指定頻率向監(jiān)控進程組的監(jiān)控進程上報自身的運行狀態(tài)和服務狀態(tài),如圖2所示,監(jiān)控進程和工作進程可做切換。
在集群服務器系統(tǒng)初始化時,按各服務器節(jié)點性能列表啟動節(jié)點和進程進行工作,對于同時在監(jiān)控節(jié)點列表和工作節(jié)點列表的機器,至少生成2個進程;對于僅在工作節(jié)點列表的機器,至少生成一個進程,標記系統(tǒng)狀態(tài)為初始化狀態(tài);取每一監(jiān)控節(jié)點的最小序列號(rank)進程作為當前監(jiān)控節(jié)點的監(jiān)控進程,標記進程類別為監(jiān)控進程類,注冊到監(jiān)控進程組中,監(jiān)控進程按進程序列號從小到大組成鏈式消息傳遞結構,測試所有監(jiān)控進程工作正常、所在節(jié)點工作正常,而后規(guī)定監(jiān)控進程組的第一監(jiān)控頻率。收集所有非監(jiān)控進程,標記進程類別為工作進程,注冊到工作進程組里,測試所有工作進程工作正常、所在節(jié)點工作正常,而后按第二監(jiān)控頻率規(guī)定工作組的報告頻率(與第一監(jiān)控頻率錯開時間)。建立起來的監(jiān)控進程組按頻率廣播通知工作進程組的每個進程保存監(jiān)控進程組的監(jiān)控進程列表,同時提供工作進程的統(tǒng)一報告頻率(即第二監(jiān)控頻率),工作進程按此頻率設置時鐘,時鐘按該值休眠,在指定時間被系統(tǒng)喚醒后,向保存在進程本地的監(jiān)控進程列表的每一個監(jiān)控進程報告服務狀況。集群服務器容災系統(tǒng)初始化完成,標記系統(tǒng)狀態(tài)為工作狀態(tài)。
為了更好的理解本發(fā)明實施例,以下對集群服務器系統(tǒng)的初始化過程進行 詳細說明。
首先設置好集群服務器系統(tǒng)使用hydra進程管理器啟動并管理進程,設置錯誤處理器為MPI_ERRORS_RETURN,以在進程失效的情況下通信訪問是否返回進程失效錯誤碼,具體的,如圖3所示,可以包括以下步驟:
S31、進程序列號最小的進程獲取各進程的進程序列號及各進程所在節(jié)點的節(jié)點標識。
具體的,按配置文件啟動集群服務器系統(tǒng),生成全部進程,通過進程序列號最小(rank=0)的進程發(fā)起MonitorProcessGroupCreate調用,開始組建監(jiān)控進程組,MonitorProcessGroupCreate發(fā)送獲取進程序列號請求到所有服務器節(jié)點。所有服務器節(jié)點上運行的進程接收到獲取進程序列號請求后,返回其進程序列號、所在節(jié)點的節(jié)點標識給來訪進程。
S32、進程序列號最小的進程確定監(jiān)控進程。
具體的,MonitorProcessGroupCreate根據獲取的進程序列號,向監(jiān)控節(jié)點列表中每個監(jiān)控節(jié)點上運行的、最小進程序列號對應的進程發(fā)送標記該進程為監(jiān)控進程類別的請求;目標進程(即各監(jiān)控節(jié)點上運行的最小進程序列號對應的進程)接收到修改進程類別請求后,修改其進程類別為監(jiān)控進程,并向rank=0的進程返回進程類別信息。
S33、進程序列號最小的進程生成監(jiān)控進程列表并通知各監(jiān)控進程存儲監(jiān)控進程列表。
具體的,rank=0的進程生成監(jiān)控進程列表并存儲,并向監(jiān)控進程組的每個進程發(fā)送保存監(jiān)控進程列表的信息,監(jiān)控進程列表中的每個進程接收到信息后存儲監(jiān)控進程列表。
S34、進程序列號最小的進程組建工作進程。
rank=0的進程發(fā)起ServiceProcessGroupCreate調用,開始組建工作進程組。ServiceProcessGroupCreate獲取不在監(jiān)控進程列表中的進程序列號及其所在服務器節(jié)點的節(jié)點標識。根據獲取的進程序列號,向對應的進程發(fā)送標記該進程 為工作進程類別的請求;目標進程(即獲取的進程序列號對應的進程)接收到修改進程類別請求后,修改其進程類別為工作進程,并向rank=0的進程返回進程類別信息。
S35、進程序列號最小的進程生成工作進程列表并通知各進程存儲工作進程列表以及通知各工作進程存儲監(jiān)控進程列表。
rank=0的進程生成工作進程列表并存儲,發(fā)送保存工作進程列表給所有進程(包括監(jiān)控進程和工作進程),每個目標進程接收到工作進程列表存儲。rank=0的進程向工作進程列表中的每一工作進程發(fā)送保存監(jiān)控進程列表的信息,每個目標進程(即每一工作進程)接收到信息后存儲監(jiān)控進程列表。
S36、進程序列號最小的進程分別通知監(jiān)控進程和工作進程其對應的監(jiān)控頻率。
rank=0的進程向監(jiān)控進程列表中的監(jiān)控進程發(fā)送第一監(jiān)控頻率,監(jiān)控進程列表中的監(jiān)控進程按此頻率進行監(jiān)控進程服務檢測;rank=0的進程向工作進程列表中的每一工作進程發(fā)送報告頻率(即第二監(jiān)控頻率),工作進程列表中的工作進程按此頻率設置報告頻率;初始化過程結束,設定系統(tǒng)狀態(tài)為工作狀態(tài),監(jiān)控進程列表中的監(jiān)控進程啟動監(jiān)控過程進行監(jiān)控,工作進程列表中的工作進程啟動計算過程提供業(yè)務服務。
在集群服務器系統(tǒng)的系統(tǒng)設計上,為工作進程設立一個時鐘及其對應的信號處理函數,工作進程按第二監(jiān)控頻率(報告頻率)值休眠,當時鐘醒來時觸發(fā)對應的信號處理函數;對于工作進程,信號處理函數驅動工作進程收集自身服務狀態(tài),發(fā)送給監(jiān)控進程組中的每個監(jiān)控進程,同時監(jiān)控信息發(fā)送情況,若對所有監(jiān)控進程的信息發(fā)送失敗,寫監(jiān)控異常日志,返回繼續(xù)工作,待時鐘休眠至下一時段后繼續(xù)嘗試發(fā)送服務信息。
監(jiān)控進程組按照設定的監(jiān)控頻率檢查監(jiān)控節(jié)點列表中每一監(jiān)控節(jié)點的運行狀況、監(jiān)控進程自身的工作狀態(tài)和工作進程的服務狀態(tài)。監(jiān)控進程組的每個監(jiān)控進程按第一監(jiān)控頻率進行監(jiān)控進程狀態(tài)檢測。在對監(jiān)控進程進行狀態(tài)監(jiān)測 時,先置系統(tǒng)狀態(tài)為監(jiān)測進程組檢測狀態(tài),按監(jiān)控進程號序列給其它所有監(jiān)控進程發(fā)送廣播信息以證實自己所在服務器節(jié)點服務正常,同時接收監(jiān)控進程組其它監(jiān)控節(jié)點通過其自身運行的監(jiān)控進程所發(fā)送的狀態(tài)信息,若所有信息發(fā)送接收正常,監(jiān)控進程檢測完成,無異常;否則,若某些監(jiān)控進程發(fā)送或接收信息異常,該監(jiān)控進程保存監(jiān)測到的異常監(jiān)控進程序列號(rank)、所在節(jié)點的節(jié)點標識及異常原因,置本監(jiān)控進程存儲的監(jiān)控進程列表中該監(jiān)控進程狀態(tài)為異常狀態(tài),待檢測完所有其它監(jiān)控進程,根據本進程保留的監(jiān)控進程列表,向其中的正常監(jiān)控進程(未被標記為異常監(jiān)控進程的監(jiān)控進程)發(fā)起監(jiān)控進程組異常消息,此時狀態(tài)正常的監(jiān)控進程交換監(jiān)控進程組信息,確認異常監(jiān)控進程。對于異常監(jiān)控進程,在監(jiān)控進程列表中屏蔽,并從服務器節(jié)點列表中除監(jiān)控節(jié)點列表包含的監(jiān)控節(jié)點以外的服務器節(jié)點(即工作節(jié)點)中選擇一工作節(jié)點加入監(jiān)控節(jié)點列表生成新進程,設置新進程類別為監(jiān)控進程,加入到監(jiān)控進程列表中,更新監(jiān)控進程組每個監(jiān)控進程的本地監(jiān)控節(jié)點列表、本地監(jiān)控進程列表,向工作進程組中每一進程發(fā)送當前監(jiān)控進程列表,同時寫日志報警。最后,置系統(tǒng)狀態(tài)為空閑狀態(tài)。
監(jiān)控進程組的每個監(jiān)控進程定時檢查工作進程的服務狀態(tài)。工作進程的時鐘按報告頻率喚醒,向監(jiān)控進程定時報告自身的工作進程序號(rank)、服務狀態(tài)和所屬節(jié)點及節(jié)點負載,若服務正常,發(fā)送正常服務信息,若異常,發(fā)送異常服務信息,若工作進程掛死,不能發(fā)送信息;監(jiān)控進程接收工作進程所報告的信息,先置系統(tǒng)狀態(tài)為工作組檢測狀態(tài),對每一接收到的工作進程報告,刷新本地工作進程列表中當前工作進程信息,對于處于本地工作進程列表但超時沒接收到報告信息的工作進程,監(jiān)控進程主動發(fā)起進程狀態(tài)探測,若無效,置其工作進程服務狀態(tài)為無效;所有工作進程報告信息接收或探測完成之后,按工作進程報告中的節(jié)點負載均值更新工作節(jié)點列表中對應工作節(jié)點的負載狀態(tài)。并和監(jiān)控進程組中的其它所有監(jiān)控進程交換各工作進程上報的信息,按同坐進程報告中的節(jié)點負載均值更新工作節(jié)點列表中對應工作節(jié)點的負載狀態(tài), 最終根據各工作節(jié)點的負載狀態(tài)更新服務器節(jié)點性能列表;監(jiān)控進程組中的其它所有監(jiān)控進程交換各工作進程上報的信息,對于工作進程服務狀態(tài)是異常的工作進程,監(jiān)控進程主動發(fā)起其工作節(jié)點主機狀態(tài)探測;若工作節(jié)點主機正常,通知所屬工作節(jié)點清除該異常工作進程,各工作進程將其從工作進程組中排除,從服務器節(jié)點中選擇一服務器節(jié)點,使用集群接口函數動態(tài)生成一個新的進程,標記該新進程類別為工作進程類,加入到工作進程列表中并發(fā)送所有節(jié)點;若對應工作節(jié)點主機失效,將該工作節(jié)點在服務器節(jié)點列表中屏蔽,同時在工作節(jié)點列表中屏蔽,更新工作節(jié)點列表并發(fā)送所有進程(包括監(jiān)控進程和工作進程),以更新監(jiān)控進程組和工作進程組中每一進程存儲的工作進程列表;工作進程服務檢測完成,置系統(tǒng)狀態(tài)為空閑狀態(tài)。
基于上述的工作原理,本發(fā)明實施例提供了一種集群服務器容災系統(tǒng),如圖1所示,包括多個監(jiān)控節(jié)點11和多個工作節(jié)點12,其中:
監(jiān)控節(jié)點11用于運行第一監(jiān)控進程,第一監(jiān)控進程按照預設的第一監(jiān)控頻率監(jiān)控存儲的監(jiān)控進程列表中的各監(jiān)控進程是否異常;以及在確定至少一個監(jiān)控進程異常時,執(zhí)行異常監(jiān)控進程恢復;以及第一監(jiān)控進程按照預設的第二頻率監(jiān)控存儲的工作進程列表中各工作進程是否異常;在確定至少一個工作進程異常時,執(zhí)行異常工作進程恢復;
工作節(jié)點12用于運行工作進程,工作進程根據存儲的監(jiān)控進程列表按照所述第二監(jiān)控頻率向所述監(jiān)控進程列表中的各監(jiān)控進程上報自身的服務狀態(tài)。
需要說明的是,具體實施時,由于部分服務器節(jié)點可能同時運行監(jiān)控進程和工作進程,為了便于區(qū)分,本發(fā)明實施例中,在描述其執(zhí)行監(jiān)控進程功能時稱之為監(jiān)控節(jié)點,在描述其執(zhí)行工作進程功能時稱之為工作節(jié)點。
以下分別結合集群服務器系統(tǒng)進行監(jiān)控過程和服務容災恢復過程對本發(fā)明實施例的具體實施方式進行說明。
一、監(jiān)控節(jié)點對監(jiān)控進程進行運行狀態(tài)檢測的實施過程
當系統(tǒng)狀態(tài)變更為工作狀態(tài)時,初始化過程結束,監(jiān)控進程列表中的監(jiān)控 進程啟動進入監(jiān)控過程,工作進程列表中的工作進程啟動進入計算過程,相互陪護,按照各自所在進程組的頻率監(jiān)控整個集群服務器系統(tǒng)的運行狀態(tài)。
監(jiān)控進程按第一監(jiān)控頻率發(fā)起監(jiān)控進程狀態(tài)檢測,確保工作進程上報服務狀態(tài)前,監(jiān)控進程列表中的監(jiān)控進程能正常工作。
具體的,監(jiān)控節(jié)點用于通過第一監(jiān)控進程根據監(jiān)控進程列表包含的各監(jiān)控進程對應的監(jiān)控進程序號由小到大的順序組成消息傳遞環(huán)鏈,并發(fā)起消息傳遞;如果在預設時長內未接收到傳遞的消息時,則確定監(jiān)控到至少一個監(jiān)控進程異常。在監(jiān)控到至少一個監(jiān)控進程異常時,第一監(jiān)控進程向監(jiān)控進程列表中的其它第二監(jiān)控進程發(fā)送運行狀態(tài)檢測消息,根據檢測結果記錄異常的監(jiān)控進程標識;確定記錄的異常監(jiān)控進程標識對應的監(jiān)控進程異常。
較佳的,第一監(jiān)控進程可以為監(jiān)控進程列表中進程序列號最小的監(jiān)控進程,則上述的監(jiān)控節(jié)點是指該進程序列號最小的監(jiān)控進程所在的服務器節(jié)點。
具體實施時,監(jiān)控進程組中最小進程序列號對應的監(jiān)控進程發(fā)起MonitorProcessGroupStatusCheck過程,MonitorProcessGroupStatusCheck組建消息鏈(按進程序列號從小到大排列),并發(fā)起消息傳遞,若消息能經過監(jiān)控進程環(huán)鏈正常返回到最小進程序列號對應的監(jiān)控進程,則可以確定監(jiān)控進程列表中的所有監(jiān)控進程正常,等待工作進程列表中的工作進程上報其服務狀態(tài)。
如果消息環(huán)鏈式傳遞超時未返還到最小監(jiān)控進程序列號,監(jiān)控進程列表中最小進程號對應的監(jiān)控進程發(fā)起MonitorProcessGroupRebuild過程,MonitorProcessGroupRebuild過程首先向監(jiān)控進程列表中的每個監(jiān)控進程順序發(fā)送運行狀態(tài)檢測信息,若狀態(tài)異常,將<異常監(jiān)控進程的進程序列號,其所在監(jiān)控節(jié)點的節(jié)點標識>按此格式加入狀態(tài)異常監(jiān)控進程列表中,重復此過程直至檢測完監(jiān)控進程組中其他所有監(jiān)控進程狀態(tài)。
在確定出異常監(jiān)控進程之后,根據異常監(jiān)控進程的數量,監(jiān)控節(jié)點通過第一監(jiān)控進程從集群服務器節(jié)點列表中選擇除監(jiān)控節(jié)點列表包含的監(jiān)控節(jié)點以外的、相應數量的工作節(jié)點分別創(chuàng)建一個監(jiān)控進程用于替換異常監(jiān)控進程;并 通過所述第一監(jiān)控進程接收各新創(chuàng)建的監(jiān)控進程返回的監(jiān)控進程序號及其所在節(jié)點的節(jié)點標識;根據接收到的監(jiān)控進程序號及節(jié)點標識分別更新監(jiān)控進程列表和監(jiān)控節(jié)點列表;并通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的監(jiān)控進程列表;以及通知工作進程列表中各工作進程更新其存儲的監(jiān)控進程列表。
具體實施時,監(jiān)控節(jié)點通過第一監(jiān)控進程分別向被選擇出的工作節(jié)點運行的任一工作進程發(fā)送監(jiān)控進程創(chuàng)建請求。較佳的,監(jiān)控節(jié)點可以通過第一監(jiān)控進程向被選擇出的工作節(jié)點上運行的、進程序列號最小的工作進程發(fā)送監(jiān)控進程創(chuàng)建請求。被選擇出的工作節(jié)點,用于通過自身運行、接收到監(jiān)控進程創(chuàng)建請求的工作進程創(chuàng)建該工作進程的子進程,并向創(chuàng)建的子進程轉發(fā)所述監(jiān)控進程創(chuàng)建請求;該子進程根據接收到的監(jiān)控進程創(chuàng)建請求,標識自身進程類別為監(jiān)控進程;并通過該工作進程向第一監(jiān)控進程返回新創(chuàng)建監(jiān)控進程序號及所在節(jié)點的節(jié)點標識。
具體的,MonitorProcessGroupRebuild過程計算狀態(tài)異常監(jiān)控進程列表中的異常監(jiān)控進程個數n,獲取服務器列表中性能排名靠前且不在監(jiān)控節(jié)點列表中的n個工作節(jié)點(具體實施時,也可以從除監(jiān)控節(jié)點以外的工作節(jié)點中任意選擇n個,本發(fā)明實施例對此不做限定),發(fā)送消息查詢這n個節(jié)點的工作進程,獲得工作進程序列號(rank)。MonitorProcessGroupRebuild向查詢到的每個工作節(jié)點上進程序列號最小的工作進程發(fā)送動態(tài)監(jiān)控進程創(chuàng)建請求。具體實施時,可以向選擇出的工作節(jié)點上任一工作進程發(fā)送動態(tài)監(jiān)控進程創(chuàng)建請求,本發(fā)明實施例對此不做限定。目標工作進程(即選擇出的工作節(jié)點上進程序列號最小的工作進程)接收到監(jiān)控進程創(chuàng)建請求后,使用MPI_Comm_spawn創(chuàng)建動態(tài)子進程,目標工作進程與新創(chuàng)建的子進程創(chuàng)建父子進程組間通信域連接,目標工作進程向該子進程轉發(fā)監(jiān)控進程創(chuàng)建請求,新創(chuàng)建的子進程標識自身進程類別為監(jiān)控進程,設置狀態(tài)為初始化狀態(tài);目標工作進程向MonitorProcessGroupRebuild返回<新動態(tài)創(chuàng)建的進程序列號,所在節(jié)點的節(jié)點標識,目標工作進程序列號,目標工作進程所在節(jié)點的節(jié)點標識>給 MonitorProcessGroupRebuild(其中,目標工作進程序列號是作為新創(chuàng)建的監(jiān)控進程與原監(jiān)控進程列表中的監(jiān)控進程通信中轉用的),MonitorProcessGroupRebuild將當前異常監(jiān)控進程從監(jiān)控進程列表中刪除,同時添加新創(chuàng)建的監(jiān)控進程到監(jiān)控進程列表中,作為原異常監(jiān)控進程的替換監(jiān)控進程。MonitorProcessGroupRebuild重復上述過程,直至異常監(jiān)控進程的替換進程全部創(chuàng)建完畢。
MonitorProcessGroupRebuild向所有進程(包括監(jiān)控進程和工作進程)發(fā)送更新其存儲新監(jiān)控進程列表消息,其它進程接收到此消息后,更新自身存儲的監(jiān)控進程列表;MonitorProcessGroupRebuild向新增監(jiān)控進程的父進程(即新增監(jiān)控進程所在節(jié)點上運行的、進程序列號最小工作進程)發(fā)起更改該新增監(jiān)控進程工作狀態(tài)請求,目標工作進程(即新增監(jiān)控進程所在節(jié)點上運行的、進程序列號最小工作進程)接收到請求后,首先向新增監(jiān)控進程發(fā)送保存工作進程列表、監(jiān)控進程列表和各服務器節(jié)點性能列表的請求,并向新增監(jiān)控進程轉發(fā)請求更改工作狀態(tài)的請求,新增監(jiān)控進程保存工作進程列表、監(jiān)控進程列表和服務器節(jié)點性能列表,并設置自身的系統(tǒng)狀態(tài)為工作狀態(tài),開始進行監(jiān)控。當所有新增監(jiān)控進程都進入工作狀態(tài)后,監(jiān)控進程狀態(tài)恢復過程完成,可以正常接收工作進程列表中各工作進程的報告。
監(jiān)控進程按預設的第一監(jiān)控頻率啟動ServiceProcessReport過程,ServiceProcessReport過程收集自身的服務狀態(tài)、系統(tǒng)資源狀態(tài),向自身的監(jiān)控進程列表中的每一個監(jiān)控進程發(fā)送報告消息,報告自身服務信息。
若監(jiān)控進程直接或間接接收到工作進程列表中的工作進程的報告消息后,對每一個工作進程的消息,更新對應工作進程的服務狀態(tài)、進程所在工作節(jié)點的性能狀態(tài),更新完所有工作進程的報告信息后,發(fā)送匯集監(jiān)控信息消息給當前監(jiān)控進程列表中進程序列號最小號的監(jiān)控進程,最小進程序列號對應的監(jiān)控進程加權各監(jiān)控進程得到的各工作節(jié)點的性能,并據此重新排列服務器節(jié)點性能列表。
監(jiān)控進程列表中最小進程序列號對應的監(jiān)控進程發(fā)送消息給所有服務器節(jié)點,更新服務器節(jié)點性能列表,設定系統(tǒng)狀態(tài)為工作狀態(tài),完成全監(jiān)控過程。若上述步驟中發(fā)送異常,接收不到工作進程列表中某些工作進程的報告時,說明這些工作進程可能異常,需啟動服務容災恢復過程。
二、監(jiān)控節(jié)點對工作進程進行服務狀態(tài)檢測的實施過程
具體實施時,監(jiān)控進程在監(jiān)控過程中發(fā)現某些工作進程沒有按照預設的第二監(jiān)控頻率上報服務狀態(tài)消息時,則說明這些工作進程或者其所在工作節(jié)點發(fā)生異常。具體的,監(jiān)控節(jié)點,可以用于在監(jiān)控到至少一個工作進程異常(即未接收到該至少一個工作進程上報的服務狀態(tài)消息)時,可以通過第一監(jiān)控進程根據存儲的工作進程列表向各工作進程發(fā)送服務狀態(tài)檢測消息根據檢測結果記錄異常的工作進程標識;確定記錄的異常工作進程標識對應的工作進程異常。在確定出異常工作進程之后,監(jiān)控節(jié)點可以通過第一監(jiān)控進程探測異常工作進程所在工作節(jié)點是否異常;并根據探測結果記錄異常的工作節(jié)點標識;根據異常工作進程的數量,從集群服務器節(jié)點列表中選擇除異常工作節(jié)點以外的、相應數量的節(jié)點分別創(chuàng)建一個工作進程用于替換異常工作進程;并通過所述第一監(jiān)控進程接收各新創(chuàng)建的工作進程返回的工作進程序號及其所在工作節(jié)點的工作節(jié)點標識;根據接收到的工作進程序號及工作節(jié)點標識分別更新存儲的工作進程列表和工作節(jié)點列表;并通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的工作進程列表;以及通知工作進程列表中各工作進程更新其存儲的工作進程列表。
其中,監(jiān)控節(jié)點,可以用于通過第一監(jiān)控進程分別向被選擇出的節(jié)點運行的任一進程發(fā)送監(jiān)控進程創(chuàng)建請求;被選擇的節(jié)點用于通過自身運行、接收到所述工作進程創(chuàng)建請求的進程創(chuàng)建該進程的子進程,并向創(chuàng)建的子進程轉發(fā)所述工作進程創(chuàng)建請求;該子進程根據接收到的工作進程創(chuàng)建請求,標識自身進程類別為工作進程;并通過接收到所述工作進程創(chuàng)建請求的進程向所述第一監(jiān)控進程返回新創(chuàng)建工作進程序號及所在節(jié)點的節(jié)點標識。
具體的,如圖4所示,對工作進程進行服務狀態(tài)檢測及發(fā)現異常工作進程時進行工作進程恢復可以包括以下步驟:
S41、監(jiān)控進程列表中最小進程序列號對應的監(jiān)控進程確定異常狀態(tài)的工作進程。
監(jiān)控進程列表中最小進程序列號對應的監(jiān)控進程發(fā)起ServiceProcessGroupRebuild過程,ServiceProcessGroupRebuild首先向監(jiān)控進程列表中所有監(jiān)控進程發(fā)送消息,置所有監(jiān)控進程為容災恢復狀態(tài);接著向工作進程的每個進程順序發(fā)送服務狀態(tài)檢測消息,若確定狀態(tài)異常,按<異常工作進程的進程序列號,其所在工作節(jié)點的節(jié)點標識>格式加入狀態(tài)異常工作進程列表,若異常工作進程所在工作節(jié)點異常,加入異常工作節(jié)點列表中,重復此過程直至檢測完工作進程列表中所有工作進程狀態(tài)。
S42、監(jiān)控進程列表中最小進程序列號對應的監(jiān)控進程選擇服務器節(jié)點及該服務器節(jié)點上的某個進程作為創(chuàng)建新進程的代理啟動進程。
ServiceProcessGroupRebuild過程計算狀態(tài)異常工作進程列表中異常工作進程個數n,獲取服務器節(jié)點性能列表中排名靠前且不在異常工作節(jié)點列表中的n個服務器節(jié)點,發(fā)送消息查詢這n個節(jié)點的工作進程或監(jiān)控進程,并選擇最小進程序列號(rank)對應的進程(可能為工作進程也可能為監(jiān)控進程)作為當前異常工作進程的代理動態(tài)啟動進程。需要說明的是,具體實施時,也可以隨機選擇任一進程,本發(fā)明實施例對此不做限定。
S43、監(jiān)控進程列表中最小進程序列號對應的監(jiān)控進程通過代理啟動進程生成異常工作進程的替換進程。
ServiceProcessGroupRebuild過程向查詢到的每個異常工作進程的代理啟動進程(即選擇出的n個服務器節(jié)點上運行的、最小進程序列號(rank)對應的進程)發(fā)送工作進程創(chuàng)建請求,該代理啟動進程接收到工作進程創(chuàng)建請求后,使用MPI_Comm_spawn創(chuàng)建動態(tài)子進程,代理啟動進程與新創(chuàng)建的子進程創(chuàng)建父子進程組間通信域連接,代理啟動進程轉發(fā)進程序列號最小的監(jiān)控進程發(fā) 送的工作進程創(chuàng)建請求,新創(chuàng)建的子進程標識進程類別為工作進程,設置子進程狀態(tài)為初始化狀態(tài);代理啟動進程向監(jiān)控進程列表中最小監(jiān)控進程序列號對應的監(jiān)控進程返回<新動態(tài)創(chuàng)建的進程的進程序列號,所在節(jié)點的節(jié)點標識,代理啟動進程的進程序列號,代理啟動進程所在節(jié)點的節(jié)點標識>,其中,代理啟動進程的進程序列號是作為新創(chuàng)建工作進程與原工作進程列表中的工作進程通信中轉用的),ServiceProcessGroupRebuild將當前處理的異常工作進程從工作進程列表中刪除,同時添加新創(chuàng)建的工作進程到工作進程列表中,作為原異常工作進程的替換進程。ServiceProcessGroupRebuild重復此過程,直至失效的工作進程的替換進程都建立起來。
S44、監(jiān)控進程列表中最小進程序列號對應的監(jiān)控進程通知所有進程存儲新工作進程列表及通知新創(chuàng)建進程更改其工作狀態(tài)。
ServiceProcessGroupRebuild向所有進程(包括工作進程和監(jiān)控進程)發(fā)送保存新工作進程列表消息,其它進程接收到此消息后,更新存儲的工作進程列表;ServiceProcessGroupRebuild通過代理啟動進程向新增工作進程發(fā)送更改新工作進程的工作狀態(tài)請求,代理啟動進程接收到該請求后,首先向新能工作進程發(fā)送存儲工作進程列表、監(jiān)控進程列表和服務器節(jié)點性能列表的請求,并向新增工作進程轉發(fā)更改其工作狀態(tài)的請求,新增工作進程存儲工作進程列表、監(jiān)控進程列表和服務器節(jié)點性能列表,并設置自身的系統(tǒng)狀態(tài)為工作狀態(tài),開始提供服務。當所有新工作進程都進入工作狀態(tài)后,異常工作進程恢復過程結束,可以正常提供服務。
S45、監(jiān)控進程列表中中最小進程序列號對應的監(jiān)控進程更新系統(tǒng)狀態(tài)。
容災恢復過程結束,監(jiān)控進程列表中中最小進程序列號對應的監(jiān)控進程設定系統(tǒng)狀態(tài)為工作狀態(tài)。
本發(fā)明實施例提供的集群服務器容災方法,針對基于集群計算框架的服務器系統(tǒng)在線容災恢復,通過設立監(jiān)控進程列表和工作進程列表,提供監(jiān)控進程和工作進程的異常處理方法,且分別提供了異常監(jiān)控進程和異常工作進程在線 恢復方法,能夠在線恢復集群服務器系統(tǒng)的服務能力,實現了系統(tǒng)容災與服務一體化設計和運行,提高了集群服務器的運行穩(wěn)定性和服務可靠性。
基于同一發(fā)明構思,本發(fā)明實施例中還提供了一種集群服務器容災方法和服務器節(jié)點,由于上述方法及設備解決問題的原理與集群服務器容災系統(tǒng)相似,因此上述方法及設備的實施可以參見系統(tǒng)的實施,重復之處不再贅述。
如圖5所示,為本發(fā)明實施例提供的集群服務器容災方法的實施流程示意圖,可以包括以下步驟:
S51、監(jiān)控節(jié)點通過自身運行的第一監(jiān)控進程分別按照預設的第一監(jiān)控頻率和第二監(jiān)控頻率監(jiān)控存儲的監(jiān)控進程列表中的各監(jiān)控進程和存儲的工作進程列表中各工作進程是否異常。
S52、在確定至少一個監(jiān)控進程異常時,執(zhí)行異常監(jiān)控進程恢復;在確定至少一個工作進程異常時,執(zhí)行異常工作進程恢復。
具體實施時,在步驟S52中,可以按照圖6所示的過程確定至少一個監(jiān)控進程異常:
S61、所述監(jiān)控節(jié)點在監(jiān)控到至少一個監(jiān)控進程異常時,通過所述第一監(jiān)控進程向監(jiān)控進程列表中的其它第二監(jiān)控進程發(fā)送運行狀態(tài)檢測消息;
S62、根據檢測結果記錄異常的監(jiān)控進程標識;
S63、確定記錄的異常監(jiān)控進程標識對應的監(jiān)控進程異常。
其中,S61中,可以按照圖7所示的流程確定監(jiān)控到至少一個監(jiān)控進程異常:
S71、所述監(jiān)控節(jié)點通過所述第一監(jiān)控進程根據監(jiān)控進程列表包含的各監(jiān)控進程對應的監(jiān)控進程序號由小到大的順序組成消息傳遞環(huán)鏈,并發(fā)起消息傳遞;
S72、如果在預設時長內未接收到傳遞的消息時,則確定監(jiān)控到至少一個監(jiān)控進程異常。
具體實施時,在確定至少一個監(jiān)控進程異常時,可以按照圖8所示的流程 執(zhí)行異常監(jiān)控進程恢復:
S81、所述監(jiān)控節(jié)點根據異常監(jiān)控進程的數量,通過所述第一監(jiān)控進程從集群服務器節(jié)點列表中選擇除監(jiān)控節(jié)點列表包含的監(jiān)控節(jié)點以外的、相應數量的工作節(jié)點分別創(chuàng)建一個監(jiān)控進程用于替換異常監(jiān)控進程;
S82、通過所述第一監(jiān)控進程接收各新創(chuàng)建的監(jiān)控進程返回的監(jiān)控進程序號及其所在節(jié)點的節(jié)點標識;
S83、根據接收到的監(jiān)控進程序號及節(jié)點標識分別更新監(jiān)控進程列表和監(jiān)控節(jié)點列表;
S84、通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的監(jiān)控進程列表;以及通知工作進程列表中各工作進程更新其存儲的監(jiān)控進程列表。
具體實施時,步驟S52中,可以按照圖9所示的流程確定至少一個工作進程異常:
S91、所述監(jiān)控節(jié)點在監(jiān)控到至少一個工作進程異常時,通過所述第一監(jiān)控進程根據存儲的工作進程列表向各工作進程發(fā)送服務狀態(tài)檢測消息;
S92、根據檢測結果記錄異常的工作進程標識;
S93、確定記錄的異常工作進程標識對應的工作進程異常。
具體實施時,在確定至少一個工作進程異常時,可以按照圖10所示的流程執(zhí)行異常工作進程恢復:
S101、所述監(jiān)控節(jié)點在確定出異常工作進程之后,通過所述第一監(jiān)控進程探測異常工作進程所在工作節(jié)點是否異常;
S102、根據探測結果記錄異常的工作節(jié)點標識;
S103、根據異常工作進程的數量,從集群服務器節(jié)點列表中選擇除異常工作節(jié)點以外的、相應數量的節(jié)點分別創(chuàng)建一個工作進程用于替換異常工作進程;
S104、所述監(jiān)控節(jié)點通過所述第一監(jiān)控進程接收各新創(chuàng)建的工作進程返回的工作進程序號及其所在工作節(jié)點的工作節(jié)點標識;
S105、根據接收到的工作進程序號及工作節(jié)點標識分別更新存儲的工作進程列表和工作節(jié)點列表;
S106、通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的工作進程列表;以及通知工作進程列表中各工作進程更新其存儲的工作進程列表。
如圖11所示為本發(fā)明實施例提供的服務器節(jié)點的結構示意圖,可以包括:
監(jiān)控單元111,用于通過運行于所述服務器節(jié)點的第一監(jiān)控進程分別按照預設的第一監(jiān)控頻率和第二監(jiān)控頻率監(jiān)控存儲的監(jiān)控進程列表中的各監(jiān)控進程和存儲的工作進程列表中各工作進程是否異常;
異常處理單元112,用于在確定至少一個監(jiān)控進程異常時,執(zhí)行異常監(jiān)控進程恢復;以及在確定至少一個工作進程異常時,執(zhí)行異常工作進程恢復。
其中,監(jiān)控單元111,可以用于在監(jiān)控到至少一個監(jiān)控進程異常時,通過所述第一監(jiān)控進程向監(jiān)控進程列表中的其它第二監(jiān)控進程發(fā)送運行狀態(tài)檢測消息;根據檢測結果記錄異常的監(jiān)控進程標識;確定記錄的異常監(jiān)控進程標識對應的監(jiān)控進程異常。
較佳的,監(jiān)控單元111可以用于通過所述第一監(jiān)控進程根據監(jiān)控進程列表包含的各監(jiān)控進程對應的監(jiān)控進程序號由小到大的順序組成消息傳遞環(huán)鏈,并發(fā)起消息傳遞;如果在預設時長內未接收到傳遞的消息時,則確定監(jiān)控到至少一個監(jiān)控進程異常。
具體實施時,異常處理單元112可以包括:
第一選擇子單元,用于根據異常監(jiān)控進程的數量,通過所述第一監(jiān)控進程從集群服務器節(jié)點列表中選擇除監(jiān)控節(jié)點列表包含的監(jiān)控節(jié)點以外的、相應數量的工作節(jié)點分別創(chuàng)建一個監(jiān)控進程用于替換異常監(jiān)控進程;
第一接收子單元,用于通過所述第一監(jiān)控進程接收各新創(chuàng)建的監(jiān)控進程返回的監(jiān)控進程序號及其所在節(jié)點的節(jié)點標識;
第一更新子單元,用于根據接收到的監(jiān)控進程序號及節(jié)點標識分別更新監(jiān)控進程列表和監(jiān)控節(jié)點列表;
第一通知子單元,用于通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的監(jiān)控進程列表;以及通知工作進程列表中各工作進程更新其存儲的監(jiān)控進程列表。
具體實施時,監(jiān)控單元111,可以用于在監(jiān)控到至少一個工作進程異常時,通過所述第一監(jiān)控進程根據存儲的工作進程列表向各工作進程發(fā)送服務狀態(tài)檢測消息;根據檢測結果記錄異常的工作進程標識;確定記錄的異常工作進程標識對應的工作進程異常。
具體實施時,異常處理單元112,可以包括:
探測子單元,用于在確定出異常工作進程之后,通過所述第一監(jiān)控進程探測異常工作進程所在工作節(jié)點是否異常;并根據探測結果記錄異常的工作節(jié)點標識;
第二選擇子單元,用于根據異常工作進程的數量,從集群服務器節(jié)點列表中選擇除異常工作節(jié)點以外的、相應數量的節(jié)點分別創(chuàng)建一個工作進程用于替換異常工作進程;
第二接收子單元,用于通過所述第一監(jiān)控進程接收各新創(chuàng)建的工作進程返回的工作進程序號及其所在工作節(jié)點的工作節(jié)點標識;
第二更新子單元,用于根據接收到的工作進程序號及工作節(jié)點標識分別更新存儲的工作進程列表和工作節(jié)點列表;
第二通知子單元,用于通知監(jiān)控進程列表中各監(jiān)控進程更新其存儲的工作進程列表;以及通知工作進程列表中各工作進程更新其存儲的工作進程列表。
為了描述的方便,以上各部分按照功能劃分為各模塊(或單元)分別描述。當然,在實施本發(fā)明時可以把各模塊(或單元)的功能在同一個或多個軟件或硬件中實現。
本發(fā)明實施例提供的集群服務器容災系統(tǒng)、方法和服務器節(jié)點,監(jiān)控節(jié)點通過自身運行的第一監(jiān)控進程按照第一監(jiān)控頻率監(jiān)控自身存儲的監(jiān)控進程列表中的每一監(jiān)控進程是否發(fā)生異常,以及按照第二監(jiān)控頻率監(jiān)控自身存儲的工作進程列表中的各共組進程是否發(fā)生異常,以及在監(jiān)控到至少一個監(jiān)控進程異 常時,執(zhí)行監(jiān)控進程恢復,在監(jiān)控到至少一個工作進程異常時,執(zhí)行工作進程恢復,通過上述過程,實現了集群服務器的異常監(jiān)控及恢復,保證了集群服務器的運行穩(wěn)定性和服務可靠性。
本領域內的技術人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
本發(fā)明是參照根據本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執(zhí)行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領域內的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例做出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及其等同技術的范圍之內,則本發(fā)明也意圖包含這些改動和變型在內。