本發(fā)明涉及云計(jì)算技術(shù),尤指一種云平臺(tái)的自監(jiān)控方法和系統(tǒng)。
背景技術(shù):
在云數(shù)據(jù)中心管理平臺(tái)中,智能監(jiān)控相關(guān)的服務(wù),由于監(jiān)控服務(wù)本身的性能問題,會(huì)導(dǎo)致監(jiān)控服務(wù)異常掛起甚至宕機(jī)。為了提高云海智能監(jiān)控相關(guān)的服務(wù)性能,需要對(duì)其自身進(jìn)行監(jiān)控,以使服務(wù)正常運(yùn)行,提供穩(wěn)定且可靠的服務(wù)。現(xiàn)有的監(jiān)控管理平臺(tái),均沒有較好的對(duì)自己的監(jiān)控服務(wù)本身進(jìn)行監(jiān)控的服務(wù)或系統(tǒng)。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種云平臺(tái)的自監(jiān)控方法和系統(tǒng),可以通過對(duì)云平臺(tái)自身進(jìn)行監(jiān)控,以使服務(wù)正常運(yùn)行,從而提供穩(wěn)定且可靠的服務(wù)。
為了達(dá)到本發(fā)明目的,一方面,本發(fā)明實(shí)施例提供了一種云平臺(tái)的自監(jiān)控方法,包括:
每個(gè)哨兵sentinel節(jié)點(diǎn)采用定期的心跳檢測(cè)對(duì)被監(jiān)控的監(jiān)控服務(wù)中的監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)控;
當(dāng)所述監(jiān)控節(jié)點(diǎn)中的主節(jié)點(diǎn)發(fā)生故障時(shí),對(duì)發(fā)生故障的主節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移。
進(jìn)一步地,所述每個(gè)sentinel節(jié)點(diǎn)采用定期的心跳檢測(cè)對(duì)被監(jiān)控的監(jiān)控服務(wù)中的監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)控包括:
每隔預(yù)設(shè)時(shí)間向主節(jié)點(diǎn)、從節(jié)點(diǎn)和除當(dāng)前sentinel節(jié)點(diǎn)以外的其它sentinel節(jié)點(diǎn)發(fā)送ping命令做心跳檢測(cè),以確認(rèn)所述主節(jié)點(diǎn)、所述從節(jié)點(diǎn)和所述其它sentinel節(jié)點(diǎn)當(dāng)前是否可達(dá)。
進(jìn)一步地,所述方法還包括:
當(dāng)所述主節(jié)點(diǎn)、所述從節(jié)點(diǎn)和所述其它sentinel節(jié)點(diǎn)中的任意節(jié)點(diǎn)在預(yù)設(shè)的時(shí)間閾值內(nèi)沒有對(duì)發(fā)出所述ping命令的第一sentinel節(jié)點(diǎn)進(jìn)行有效回復(fù)時(shí),所述第一sentinel節(jié)點(diǎn)對(duì)該節(jié)點(diǎn)進(jìn)行主觀下線;
當(dāng)所述第一sentinel節(jié)點(diǎn)主觀下線的節(jié)點(diǎn)是主節(jié)點(diǎn)時(shí),所述第一sentinel節(jié)點(diǎn)向除所述第一sentinel節(jié)點(diǎn)以外的其他sentinel節(jié)點(diǎn)詢問對(duì)進(jìn)行主觀下線的該主節(jié)點(diǎn)的判斷,當(dāng)超過預(yù)設(shè)個(gè)數(shù)的sentinel節(jié)點(diǎn)認(rèn)為該主節(jié)點(diǎn)故障時(shí),所述第一sentinel節(jié)點(diǎn)對(duì)該主節(jié)點(diǎn)進(jìn)行客觀下線。
進(jìn)一步地,所述對(duì)發(fā)生故障的監(jiān)控節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移包括:
確認(rèn)所述監(jiān)控節(jié)點(diǎn)中的領(lǐng)導(dǎo)者節(jié)點(diǎn);
所述領(lǐng)導(dǎo)者節(jié)點(diǎn)選舉出的sentinel節(jié)點(diǎn)負(fù)責(zé)所述故障轉(zhuǎn)移。
進(jìn)一步地,所述方法還包括:
當(dāng)確定所述監(jiān)控節(jié)點(diǎn)中沒有所述領(lǐng)導(dǎo)者節(jié)點(diǎn)時(shí),從每個(gè)在線的sentinel節(jié)點(diǎn)中選出所述領(lǐng)導(dǎo)者節(jié)點(diǎn);
從每個(gè)在線的sentinel節(jié)點(diǎn)中選出所述領(lǐng)導(dǎo)者節(jié)點(diǎn)包括:
所述每個(gè)在線的sentinel節(jié)點(diǎn)中任意的第二sentinel節(jié)點(diǎn)向除所述第二sentinel節(jié)點(diǎn)以外的其它在線的sentinel節(jié)點(diǎn)發(fā)出將自身設(shè)置為所述領(lǐng)導(dǎo)者節(jié)點(diǎn)的請(qǐng)求;
收到所述請(qǐng)求的所述其它在線的sentinel節(jié)點(diǎn),如果未同意過除所述第二sentinel節(jié)點(diǎn)以外的其它在線的sentinel節(jié)點(diǎn)發(fā)出的請(qǐng)求,則同意所述第二sentinel節(jié)點(diǎn)發(fā)出的請(qǐng)求,如果已經(jīng)同意過除所述第二sentinel節(jié)點(diǎn)以外的其它在線的sentinel節(jié)點(diǎn)發(fā)出的請(qǐng)求,則拒絕所述第二sentinel節(jié)點(diǎn)發(fā)出的請(qǐng)求;
如果所述第二sentinel節(jié)點(diǎn)確認(rèn)自身收到的同意的票數(shù)大于或等于sentinel節(jié)點(diǎn)總數(shù)/2+1,則將自身設(shè)置為所述領(lǐng)導(dǎo)者節(jié)點(diǎn);如果所述第二sentinel節(jié)點(diǎn)確認(rèn)自身收到的同意的票數(shù)小于sentinel節(jié)點(diǎn)總數(shù)/2+1,則進(jìn)入下一次選舉。
進(jìn)一步地,所述領(lǐng)導(dǎo)者節(jié)點(diǎn)選舉出的sentinel節(jié)點(diǎn)負(fù)責(zé)所述故障轉(zhuǎn)移包括:
所述領(lǐng)導(dǎo)者節(jié)點(diǎn)從所述監(jiān)控節(jié)點(diǎn)中選出一個(gè)新的主節(jié)點(diǎn);
所述領(lǐng)導(dǎo)者節(jié)點(diǎn)命令除所述新的主節(jié)點(diǎn)以外的節(jié)點(diǎn)作為所述新的主節(jié)點(diǎn)的從節(jié)點(diǎn);
所述領(lǐng)導(dǎo)者節(jié)點(diǎn)將被客觀下線的所述主節(jié)點(diǎn)更新為從節(jié)點(diǎn);并在更新后的從節(jié)點(diǎn)恢復(fù)正常時(shí)與所述新的主節(jié)點(diǎn)建立主從分布式連接。
進(jìn)一步地,所述方法還包括:
每個(gè)sentinel節(jié)點(diǎn)獲取從節(jié)點(diǎn)的信息,并在確認(rèn)有新的監(jiān)控節(jié)點(diǎn)加入,存在監(jiān)控節(jié)點(diǎn)不可達(dá)或者發(fā)生故障轉(zhuǎn)移后,通過info命令更新節(jié)點(diǎn)拓?fù)湫畔ⅰ?/p>
另一方面,本發(fā)明實(shí)施例還提供了一種云平臺(tái)的自監(jiān)控系統(tǒng),包括:
監(jiān)控模塊,用于每個(gè)哨兵sentinel節(jié)點(diǎn)采用定期的心跳檢測(cè)對(duì)被監(jiān)控的監(jiān)控服務(wù)中的監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)控;
故障轉(zhuǎn)移模塊,用于當(dāng)所述監(jiān)控節(jié)點(diǎn)中的主節(jié)點(diǎn)發(fā)生故障時(shí),對(duì)發(fā)生故障的主節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移。
進(jìn)一步地,所述監(jiān)控模塊還用于:
每隔預(yù)設(shè)時(shí)間向主節(jié)點(diǎn)、從節(jié)點(diǎn)和除當(dāng)前sentinel節(jié)點(diǎn)以外的其它sentinel節(jié)點(diǎn)發(fā)送ping命令做心跳檢測(cè),以確認(rèn)所述主節(jié)點(diǎn)、所述從節(jié)點(diǎn)和所述其它sentinel節(jié)點(diǎn)當(dāng)前是否可達(dá)。
進(jìn)一步地,所述系統(tǒng)還包括判斷模塊,用于:
當(dāng)所述主節(jié)點(diǎn)、所述從節(jié)點(diǎn)和所述其它sentinel節(jié)點(diǎn)中的任意節(jié)點(diǎn)在預(yù)設(shè)的時(shí)間閾值內(nèi)沒有對(duì)發(fā)出所述ping命令的第一sentinel節(jié)點(diǎn)進(jìn)行有效回復(fù)時(shí),所述第一sentinel節(jié)點(diǎn)對(duì)該節(jié)點(diǎn)進(jìn)行主觀下線;
當(dāng)所述第一sentinel節(jié)點(diǎn)主觀下線的節(jié)點(diǎn)是主節(jié)點(diǎn)時(shí),所述第一sentinel節(jié)點(diǎn)向除所述第一sentinel節(jié)點(diǎn)以外的其他sentinel節(jié)點(diǎn)詢問對(duì)進(jìn)行主觀下線的該主節(jié)點(diǎn)的判斷,當(dāng)超過預(yù)設(shè)個(gè)數(shù)的sentinel節(jié)點(diǎn)認(rèn)為該主節(jié)點(diǎn)故障時(shí),所述第一sentinel節(jié)點(diǎn)對(duì)該主節(jié)點(diǎn)進(jìn)行客觀下線。
與現(xiàn)有技術(shù)相比,本發(fā)明通過每個(gè)哨兵sentinel節(jié)點(diǎn)采用定期的心跳檢測(cè)對(duì)被監(jiān)控的監(jiān)控服務(wù)中的監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)控;當(dāng)所述監(jiān)控節(jié)點(diǎn)中的主節(jié)點(diǎn)發(fā)生故障時(shí),對(duì)發(fā)生故障的主節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移。本發(fā)明實(shí)施例能夠?qū)υ破脚_(tái)自身進(jìn)行監(jiān)控,以使服務(wù)正常運(yùn)行,從而提供穩(wěn)定且可靠的服務(wù),提高了云平臺(tái)智能監(jiān)控相關(guān)的服務(wù)性能。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
附圖說明
附圖用來提供對(duì)本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本申請(qǐng)的實(shí)施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。
圖1為本發(fā)明實(shí)施例云平臺(tái)的自監(jiān)控方法的流程圖;
圖2為本發(fā)明實(shí)施例云平臺(tái)的自監(jiān)控方法中哨兵節(jié)點(diǎn)對(duì)主從節(jié)點(diǎn)進(jìn)行的心跳檢測(cè)圖;
圖3為本發(fā)明實(shí)施例云平臺(tái)的自監(jiān)控系統(tǒng)的結(jié)構(gòu)圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。
在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖1為本發(fā)明實(shí)施例云平臺(tái)的自監(jiān)控方法的流程圖,如圖1所示,本發(fā)明實(shí)施例的方法包括以下步驟:
步驟100:每個(gè)哨兵sentinel節(jié)點(diǎn)采用定期的心跳檢測(cè)對(duì)被監(jiān)控的監(jiān)控服務(wù)中的監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)控;
例如,每隔1秒,每個(gè)sentinel節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)(master)、從節(jié)點(diǎn)(slave)、其余sentinel節(jié)點(diǎn)發(fā)送一條ping命令做一次心跳檢測(cè),來確認(rèn)這些節(jié)點(diǎn)當(dāng)前是否可達(dá);
步驟101:當(dāng)所述監(jiān)控節(jié)點(diǎn)中的主節(jié)點(diǎn)發(fā)生故障時(shí),對(duì)發(fā)生故障的主節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移。
當(dāng)哨兵節(jié)點(diǎn)監(jiān)測(cè)到某個(gè)主節(jié)點(diǎn)客觀下線之后,就會(huì)開始故障轉(zhuǎn)移流程。
只有主節(jié)點(diǎn)故障才進(jìn)行故障轉(zhuǎn)移,其它節(jié)點(diǎn)整個(gè)系統(tǒng)容忍2個(gè)節(jié)點(diǎn)的失效,處理這種失敗就是簡(jiǎn)單的通過無限的重試。
進(jìn)一步地,所述每個(gè)sentinel節(jié)點(diǎn)采用定期的心跳檢測(cè)對(duì)被監(jiān)控的監(jiān)控服務(wù)中的監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)控包括:
每隔預(yù)設(shè)時(shí)間向主節(jié)點(diǎn)、從節(jié)點(diǎn)和除當(dāng)前sentinel節(jié)點(diǎn)以外的其它sentinel節(jié)點(diǎn)發(fā)送ping命令做心跳檢測(cè),以確認(rèn)所述主節(jié)點(diǎn)、所述從節(jié)點(diǎn)和所述其它sentinel節(jié)點(diǎn)當(dāng)前是否可達(dá)。
進(jìn)一步地,所述方法還包括:
當(dāng)所述主節(jié)點(diǎn)、所述從節(jié)點(diǎn)和所述其它sentinel節(jié)點(diǎn)中的任意節(jié)點(diǎn)在預(yù)設(shè)的時(shí)間閾值內(nèi)沒有對(duì)發(fā)出所述ping命令的第一sentinel節(jié)點(diǎn)進(jìn)行有效回復(fù)時(shí),所述第一sentinel節(jié)點(diǎn)對(duì)該節(jié)點(diǎn)進(jìn)行主觀下線;
具體地,每個(gè)sentinel節(jié)點(diǎn)會(huì)每隔1秒對(duì)主節(jié)點(diǎn)、從節(jié)點(diǎn)、其他sentinel節(jié)點(diǎn)發(fā)送ping命令做心跳檢測(cè),當(dāng)超過設(shè)置的最大時(shí)間閾值沒有進(jìn)行有效回復(fù),sentinel節(jié)點(diǎn)就會(huì)對(duì)該節(jié)點(diǎn)做失敗判定,即主觀下線;
當(dāng)所述第一sentinel節(jié)點(diǎn)主觀下線的節(jié)點(diǎn)是主節(jié)點(diǎn)時(shí),所述第一sentinel節(jié)點(diǎn)向除所述第一sentinel節(jié)點(diǎn)以外的其他sentinel節(jié)點(diǎn)詢問對(duì)進(jìn)行主觀下線的該主節(jié)點(diǎn)的判斷,當(dāng)超過預(yù)設(shè)個(gè)數(shù)的sentinel節(jié)點(diǎn)認(rèn)為該主節(jié)點(diǎn)故障時(shí),所述第一sentinel節(jié)點(diǎn)對(duì)該主節(jié)點(diǎn)進(jìn)行客觀下線。
具體地,當(dāng)sentinel節(jié)點(diǎn)主觀下線的節(jié)點(diǎn)是主節(jié)點(diǎn)時(shí),該sentinel節(jié)點(diǎn)會(huì)向其他節(jié)點(diǎn)詢問對(duì)主節(jié)點(diǎn)的判斷,當(dāng)超過“法定人數(shù)”個(gè)數(shù),sentinel節(jié)點(diǎn)認(rèn)為主節(jié)點(diǎn)確實(shí)有問題,這時(shí)該sentinel節(jié)點(diǎn)會(huì)做出客觀下線的決定。
進(jìn)一步地,所述對(duì)發(fā)生故障的監(jiān)控節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移包括:
確認(rèn)所述監(jiān)控節(jié)點(diǎn)中的領(lǐng)導(dǎo)者節(jié)點(diǎn);
所述領(lǐng)導(dǎo)者節(jié)點(diǎn)選舉出的sentinel節(jié)點(diǎn)負(fù)責(zé)所述故障轉(zhuǎn)移。
進(jìn)一步地,所述方法還包括:
當(dāng)確定所述監(jiān)控節(jié)點(diǎn)中沒有所述領(lǐng)導(dǎo)者節(jié)點(diǎn)時(shí),從每個(gè)在線的sentinel節(jié)點(diǎn)中選出所述領(lǐng)導(dǎo)者節(jié)點(diǎn);
從每個(gè)在線的sentinel節(jié)點(diǎn)中選出所述領(lǐng)導(dǎo)者節(jié)點(diǎn)包括:
所述每個(gè)在線的sentinel節(jié)點(diǎn)中任意的第二sentinel節(jié)點(diǎn)向除所述第二sentinel節(jié)點(diǎn)以外的其它在線的sentinel節(jié)點(diǎn)發(fā)出將自身設(shè)置為所述領(lǐng)導(dǎo)者節(jié)點(diǎn)的請(qǐng)求;
收到所述請(qǐng)求的所述其它在線的sentinel節(jié)點(diǎn),如果未同意過除所述第二sentinel節(jié)點(diǎn)以外的其它在線的sentinel節(jié)點(diǎn)發(fā)出的請(qǐng)求,則同意所述第二sentinel節(jié)點(diǎn)發(fā)出的請(qǐng)求,如果已經(jīng)同意過除所述第二sentinel節(jié)點(diǎn)以外的其它在線的sentinel節(jié)點(diǎn)發(fā)出的請(qǐng)求,則拒絕所述第二sentinel節(jié)點(diǎn)發(fā)出的請(qǐng)求;
如果所述第二sentinel節(jié)點(diǎn)確認(rèn)自身收到的同意的票數(shù)大于或等于sentinel節(jié)點(diǎn)總數(shù)/2+1,則將自身設(shè)置為所述領(lǐng)導(dǎo)者節(jié)點(diǎn);如果所述第二sentinel節(jié)點(diǎn)確認(rèn)自身收到的同意的票數(shù)小于sentinel節(jié)點(diǎn)總數(shù)/2+1,則進(jìn)入下一次選舉。
進(jìn)一步地,所述領(lǐng)導(dǎo)者節(jié)點(diǎn)選舉出的sentinel節(jié)點(diǎn)負(fù)責(zé)所述故障轉(zhuǎn)移包括:
所述領(lǐng)導(dǎo)者節(jié)點(diǎn)從所述監(jiān)控節(jié)點(diǎn)中選出一個(gè)新的主節(jié)點(diǎn);
所述領(lǐng)導(dǎo)者節(jié)點(diǎn)命令除所述新的主節(jié)點(diǎn)以外的節(jié)點(diǎn)作為所述新的主節(jié)點(diǎn)的從節(jié)點(diǎn);
所述領(lǐng)導(dǎo)者節(jié)點(diǎn)將被客觀下線的所述主節(jié)點(diǎn)更新為從節(jié)點(diǎn);并在更新后的從節(jié)點(diǎn)恢復(fù)正常時(shí)與所述新的主節(jié)點(diǎn)建立主從分布式連接。
進(jìn)一步地,所述方法還包括:
每個(gè)sentinel節(jié)點(diǎn)獲取從節(jié)點(diǎn)的信息,并在確認(rèn)有新的監(jiān)控節(jié)點(diǎn)加入,存在監(jiān)控節(jié)點(diǎn)不可達(dá)或者發(fā)生故障轉(zhuǎn)移后,通過info命令更新節(jié)點(diǎn)拓?fù)湫畔ⅰ?/p>
本發(fā)明通過每個(gè)哨兵sentinel節(jié)點(diǎn)采用定期的心跳檢測(cè)對(duì)被監(jiān)控的監(jiān)控服務(wù)中的監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)控;當(dāng)所述監(jiān)控節(jié)點(diǎn)中的主節(jié)點(diǎn)發(fā)生故障時(shí),對(duì)發(fā)生故障的主節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移。本發(fā)明實(shí)施例能夠?qū)υ破脚_(tái)自身進(jìn)行監(jiān)控,以使服務(wù)正常運(yùn)行,從而提供穩(wěn)定且可靠的服務(wù),提高了云平臺(tái)智能監(jiān)控相關(guān)的服務(wù)性能。
下面從原理上對(duì)本發(fā)明實(shí)施例的方法進(jìn)行詳細(xì)說明:
本發(fā)明實(shí)施例采用raft算法實(shí)現(xiàn)選舉領(lǐng)導(dǎo)人策略,實(shí)現(xiàn)的哨兵(sentinel)節(jié)點(diǎn)采用心跳檢測(cè)機(jī)制對(duì)主從式節(jié)點(diǎn)進(jìn)行的監(jiān)控,對(duì)新主節(jié)點(diǎn)的選舉,以及故障轉(zhuǎn)移,使得云平臺(tái)環(huán)境的穩(wěn)定性極大地提高。
采用raft算法實(shí)現(xiàn)的選舉領(lǐng)導(dǎo)人策略,可以提高云海監(jiān)控服務(wù)的可靠性、穩(wěn)定性。當(dāng)云海服務(wù)自身異常掛起導(dǎo)致無法提供正常的服務(wù)的時(shí)候,sentinel節(jié)點(diǎn)可以選出新的主節(jié)點(diǎn),繼續(xù)提供穩(wěn)定的服務(wù)。
本發(fā)明實(shí)施例作為一種基于云海的主從式心跳檢測(cè)的自監(jiān)控系統(tǒng),通過采用主從式部署的方式,進(jìn)行定期的心跳檢測(cè),然后以發(fā)送信號(hào)量的方式,使服務(wù)穩(wěn)定且可靠的運(yùn)行。在消耗極少資源的情況下,使監(jiān)控管理平臺(tái)能夠穩(wěn)定可靠地提供服務(wù)。
本發(fā)明實(shí)施例面向云海分布式平臺(tái)的自監(jiān)控方法采用java高級(jí)語言進(jìn)行raft算法的描述,通過sentinel實(shí)現(xiàn)領(lǐng)導(dǎo)者選舉。sentinel服務(wù)通過遠(yuǎn)程過程調(diào)用(remoteprocedurecall,rpc)來通信,候選人在選舉過程中觸發(fā)requestvoteprc,心跳(heartbeat)機(jī)制是由領(lǐng)導(dǎo)人觸發(fā)的appendentriesrpc。
使用哨兵sentinel節(jié)點(diǎn)的三個(gè)定時(shí)任務(wù)、主觀下線和客觀下線、sentinel節(jié)點(diǎn)領(lǐng)導(dǎo)者選舉、故障轉(zhuǎn)移,來提高監(jiān)控服務(wù)本身的高可用性。
其中,主觀下線(subjectivelydown,簡(jiǎn)稱sdown)指的是單個(gè)sentinel實(shí)例對(duì)服務(wù)器做出的下線判斷。
客觀下線(objectivelydown,簡(jiǎn)稱odown)指的是多個(gè)sentinel實(shí)例在對(duì)同一個(gè)服務(wù)器做出的下線判斷,并且通過命令互相交流之后,得出的服務(wù)器下線判斷。
圖2為本發(fā)明實(shí)施例云平臺(tái)的自監(jiān)控方法中哨兵節(jié)點(diǎn)對(duì)主從節(jié)點(diǎn)進(jìn)行的心跳檢測(cè)圖,如圖2所示,本發(fā)明實(shí)施例中基于云海的主從式心跳檢測(cè)的自監(jiān)控系統(tǒng)具體實(shí)施過程如下:
首先,一套合理的監(jiān)控機(jī)制是哨兵sentinel節(jié)點(diǎn)判定節(jié)點(diǎn)不可達(dá)的重要保證,sentinel通過三個(gè)定時(shí)監(jiān)控任務(wù)完成對(duì)各個(gè)節(jié)點(diǎn)發(fā)現(xiàn)和監(jiān)控,用來獲取從節(jié)點(diǎn)的信息,當(dāng)有新的節(jié)點(diǎn)加入時(shí)都可以立刻感知出來,節(jié)點(diǎn)不可達(dá)或者故障轉(zhuǎn)移后,可以通過info命令實(shí)時(shí)更新節(jié)點(diǎn)拓?fù)湫畔ⅲ?/p>
三個(gè)定時(shí)任務(wù)實(shí)現(xiàn)時(shí)主要包括以下幾個(gè)步驟:
每隔10秒,每個(gè)sentinel節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)和從節(jié)點(diǎn)發(fā)送info命令獲取最新的拓?fù)浣Y(jié)構(gòu);
每隔2秒,每個(gè)sentinel節(jié)點(diǎn)會(huì)向主從節(jié)點(diǎn)發(fā)送該sentinel節(jié)點(diǎn)對(duì)于主節(jié)點(diǎn)的判斷及當(dāng)前sentinel節(jié)點(diǎn)的信息,用來發(fā)現(xiàn)新的sentinel節(jié)點(diǎn),sentinel節(jié)點(diǎn)之間交換主節(jié)點(diǎn)的狀態(tài),作為客觀下線及領(lǐng)導(dǎo)者選舉的依據(jù);
每隔1秒,每個(gè)sentinel節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)(master)、從節(jié)點(diǎn)(slave)、其余sentinel節(jié)點(diǎn)發(fā)送一條ping命令做一次心跳檢測(cè),來確認(rèn)這些節(jié)點(diǎn)當(dāng)前是否可達(dá);例如,圖2中,sentinel-1節(jié)點(diǎn)向master、slave-1、slave-2、sentinel-2、sentinel-3節(jié)點(diǎn)發(fā)送ping命令。
其次,主觀下線和客觀下線是用來判定故障的節(jié)點(diǎn):
每個(gè)sentinel節(jié)點(diǎn)會(huì)每隔1秒對(duì)主節(jié)點(diǎn)、從節(jié)點(diǎn)、其他sentinel節(jié)點(diǎn)發(fā)送ping命令做心跳檢測(cè),當(dāng)超過設(shè)置的最大時(shí)間閾值沒有進(jìn)行有效回復(fù),sentinel節(jié)點(diǎn)就會(huì)對(duì)該節(jié)點(diǎn)做失敗判定,即主觀下線;
當(dāng)sentinel節(jié)點(diǎn)主觀下線的節(jié)點(diǎn)是主節(jié)點(diǎn)時(shí),該sentinel節(jié)點(diǎn)會(huì)向其他節(jié)點(diǎn)詢問對(duì)主節(jié)點(diǎn)的判斷,當(dāng)超過“法定人數(shù)”個(gè)數(shù),sentinel節(jié)點(diǎn)認(rèn)為主節(jié)點(diǎn)確實(shí)有問題,這時(shí)該sentinel節(jié)點(diǎn)會(huì)做出客觀下線的決定;
然后,需要對(duì)故障節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移操作,此時(shí)需要選舉出新的領(lǐng)導(dǎo)者:
每個(gè)在線的sentinel節(jié)點(diǎn)都有資格成為領(lǐng)導(dǎo)者,當(dāng)它判定主節(jié)點(diǎn)主觀下線時(shí)候,會(huì)向其他sentinel節(jié)點(diǎn)發(fā)送請(qǐng)求,要求將自己設(shè)置為領(lǐng)導(dǎo)者。
收到請(qǐng)求的sentinel節(jié)點(diǎn),如果沒有同意過其他sentinel節(jié)點(diǎn),將同意該請(qǐng)求,否則拒絕。
如果該sentinel節(jié)點(diǎn)發(fā)現(xiàn)自己的票數(shù)大于等于sentinels/2+1節(jié)點(diǎn),那么它將成為領(lǐng)導(dǎo)者。
如果此過程沒有選舉出領(lǐng)導(dǎo)者,將進(jìn)入下一次選舉。
故障轉(zhuǎn)移,領(lǐng)導(dǎo)者選舉出的sentinel節(jié)點(diǎn)負(fù)責(zé)故障轉(zhuǎn)移:
在從節(jié)點(diǎn)列表中選出一個(gè)節(jié)點(diǎn)作為新的主節(jié)點(diǎn),過濾掉主觀下線、斷線,5秒內(nèi)沒有回復(fù)過的sentinel節(jié)點(diǎn)ping響應(yīng)、與主節(jié)點(diǎn)失聯(lián)超過10秒。選擇從節(jié)點(diǎn)優(yōu)先級(jí)最高的從節(jié)點(diǎn)列表。
sentinel領(lǐng)導(dǎo)者節(jié)點(diǎn)會(huì)對(duì)第一步選出來的從節(jié)點(diǎn),讓其成為主節(jié)點(diǎn)。
sentinel領(lǐng)導(dǎo)者節(jié)點(diǎn)會(huì)向剩余的從節(jié)點(diǎn)發(fā)送命令,讓它們成為新主節(jié)點(diǎn)的從節(jié)點(diǎn)。
sentinel節(jié)點(diǎn)集合會(huì)將原來的主節(jié)點(diǎn)更新為從節(jié)點(diǎn),并保持著對(duì)其關(guān)注,當(dāng)其恢復(fù)后命令它去與新的主節(jié)點(diǎn)建立主從分布式連接。
本發(fā)明采用raft算法實(shí)現(xiàn)的sentinel服務(wù),可以實(shí)現(xiàn)sentinel節(jié)點(diǎn)對(duì)主從式節(jié)點(diǎn)的監(jiān)控,對(duì)新主節(jié)點(diǎn)的選舉,以及故障轉(zhuǎn)移,使得環(huán)境的穩(wěn)定性極大的提高,當(dāng)云海監(jiān)控服務(wù)自身異常掛起導(dǎo)致無法提供正常的監(jiān)控服務(wù)的時(shí)候,sentinel節(jié)點(diǎn)可以選出新的主節(jié)點(diǎn),繼續(xù)提供穩(wěn)定的監(jiān)控服務(wù)。
其中,通過定時(shí)監(jiān)控任務(wù)完成對(duì)各個(gè)節(jié)點(diǎn)發(fā)現(xiàn)和監(jiān)控,用來獲取從節(jié)點(diǎn)的信息,包括感知是否有新的節(jié)點(diǎn)加入,節(jié)點(diǎn)不可達(dá)或者監(jiān)控服務(wù)異常。
領(lǐng)導(dǎo)人觸發(fā)的心跳(heartbeat)機(jī)制進(jìn)行的新主節(jié)點(diǎn)的選舉,主要包括如下幾個(gè)步驟:
s11:如果一個(gè)追隨者在一個(gè)周期內(nèi)沒有收到心跳信息,此時(shí)選舉超時(shí);
s12:然后它就會(huì)假定沒有可用的領(lǐng)導(dǎo)人,并且開始一次選舉來選出一個(gè)新的領(lǐng)導(dǎo)人;
s13:如果該sentinel節(jié)點(diǎn)的選舉票數(shù)(votenum)>=(總sentinel節(jié)點(diǎn)數(shù))/2+1,此時(shí)選舉自己為領(lǐng)導(dǎo)者;
s14:如果此過程沒有選舉出領(lǐng)導(dǎo)者,進(jìn)入下一次選舉。
選舉出的領(lǐng)導(dǎo)人進(jìn)行的故障轉(zhuǎn)移,主要包括如下幾個(gè)步驟:
s21:sentinel領(lǐng)導(dǎo)者在從節(jié)點(diǎn)中選出一個(gè)新的主節(jié)點(diǎn);
s22:sentinel領(lǐng)導(dǎo)者向剩余的從節(jié)點(diǎn)發(fā)送命令,讓它們成為新主節(jié)點(diǎn)的從節(jié)點(diǎn);
s23:sentine領(lǐng)導(dǎo)者將原來的主節(jié)點(diǎn)更新為從節(jié)點(diǎn),當(dāng)其恢復(fù)正常時(shí),與新的主節(jié)點(diǎn)建立主從分布式連接。
圖3為本發(fā)明實(shí)施例云平臺(tái)的自監(jiān)控系統(tǒng)的結(jié)構(gòu)圖,如圖3所示,本發(fā)明實(shí)施例另一方面提供的一種云平臺(tái)的自監(jiān)控系統(tǒng),包括:
監(jiān)控模塊301,用于每個(gè)哨兵sentinel節(jié)點(diǎn)采用定期的心跳檢測(cè)對(duì)被監(jiān)控的監(jiān)控服務(wù)中的監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)控;
故障轉(zhuǎn)移模塊302,用于當(dāng)所述監(jiān)控節(jié)點(diǎn)中的主節(jié)點(diǎn)發(fā)生故障時(shí),對(duì)發(fā)生故障的主節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移。
進(jìn)一步地,所述監(jiān)控模塊301還用于:
每隔預(yù)設(shè)時(shí)間向主節(jié)點(diǎn)、從節(jié)點(diǎn)和除當(dāng)前sentinel節(jié)點(diǎn)以外的其它sentinel節(jié)點(diǎn)發(fā)送ping命令做心跳檢測(cè),以確認(rèn)所述主節(jié)點(diǎn)、所述從節(jié)點(diǎn)和所述其它sentinel節(jié)點(diǎn)當(dāng)前是否可達(dá)。
進(jìn)一步地,所述系統(tǒng)還包括判斷模塊,用于:
當(dāng)所述主節(jié)點(diǎn)、所述從節(jié)點(diǎn)和所述其它sentinel節(jié)點(diǎn)中的任意節(jié)點(diǎn)在預(yù)設(shè)的時(shí)間閾值內(nèi)沒有對(duì)發(fā)出所述ping命令的第一sentinel節(jié)點(diǎn)進(jìn)行有效回復(fù)時(shí),所述第一sentinel節(jié)點(diǎn)對(duì)該節(jié)點(diǎn)進(jìn)行主觀下線;
當(dāng)所述第一sentinel節(jié)點(diǎn)主觀下線的節(jié)點(diǎn)是主節(jié)點(diǎn)時(shí),所述第一sentinel節(jié)點(diǎn)向除所述第一sentinel節(jié)點(diǎn)以外的其他sentinel節(jié)點(diǎn)詢問對(duì)進(jìn)行主觀下線的該主節(jié)點(diǎn)的判斷,當(dāng)超過預(yù)設(shè)個(gè)數(shù)的sentinel節(jié)點(diǎn)認(rèn)為該主節(jié)點(diǎn)故障時(shí),所述第一sentinel節(jié)點(diǎn)對(duì)該主節(jié)點(diǎn)進(jìn)行客觀下線。
本發(fā)明實(shí)施例使用raft算法實(shí)現(xiàn)的sentinel服務(wù),可以實(shí)現(xiàn)對(duì)主從節(jié)點(diǎn)的監(jiān)控,以及對(duì)新主節(jié)點(diǎn)的選舉,及故障轉(zhuǎn)移步驟。能夠提升云海服務(wù)自身的穩(wěn)定性及可靠性,提高云海服務(wù)平臺(tái)的競(jìng)爭(zhēng)力。
雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容僅為便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式及細(xì)節(jié)上進(jìn)行任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。