本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種節(jié)點選舉方法及裝置。
背景技術(shù):
分布式IRF(Intelligent Resilient Framework,智能彈性架構(gòu))系統(tǒng)通過交互STM(Stacking Management,堆疊管理)協(xié)議報文實現(xiàn)堆疊選舉,堆疊選舉過程涉及大量報文交互以及成員角色狀態(tài)遷移,且只有框內(nèi)本地主用主控節(jié)點可以參與選舉,本地備份主控節(jié)點只能做數(shù)據(jù)備份,最終選舉出一個全局主用主控節(jié)點和N個全局備份主控節(jié)點。
集群系統(tǒng)支持單框、背靠背(B2B)和N+M(N表示交換框數(shù)目,M表示線卡框數(shù)目)多框。集群系統(tǒng)中各主控節(jié)點也需要進(jìn)行選舉,最終選舉出一個全局主用主控節(jié)點、一個全局備份主控節(jié)點和N個全局普通主控節(jié)點,但目前尚無適用于集群系統(tǒng)的選舉方案。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種節(jié)點選舉方法及裝置,用以簡化節(jié)點選舉流程,提高選舉效率。
為實現(xiàn)上述發(fā)明目的,本發(fā)明提供了如下技術(shù)方案:
本發(fā)明提供一種節(jié)點選舉方法,應(yīng)用于集群系統(tǒng)中的任一主控節(jié)點,所述方法包括:
接收鄰居主控節(jié)點發(fā)送的握手交互報文,所述握手交互報文攜帶所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài);
根據(jù)所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài),更新本地記錄的所述鄰居主控節(jié)點的鄰居狀態(tài);
根據(jù)本地記錄的包括本主控節(jié)點在內(nèi)的主控節(jié)點的鄰居狀態(tài),從非初始狀態(tài)的主控節(jié)點中選舉全局主用主控節(jié)點,所述非初始狀態(tài)為單向狀態(tài)或雙向狀態(tài),其中,本地記錄的本主控節(jié)點的鄰居狀態(tài)默認(rèn)為雙向狀態(tài);從除全局主用主控節(jié)點以外的鄰居狀態(tài)為雙向狀態(tài)的主控節(jié)點中選舉全局備份主控節(jié)點。
本發(fā)明還提供一種節(jié)點選舉裝置,應(yīng)用于集群系統(tǒng)中的任一主控節(jié)點,所述裝置包括:
報文接收單元,用于接收鄰居主控節(jié)點發(fā)送的握手交互報文,所述握手交互報文攜帶所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài);
狀態(tài)更新單元,用于根據(jù)所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài),更新本地記錄的所述鄰居主控節(jié)點的鄰居狀態(tài);
全局主選舉單元,用于根據(jù)本地記錄的包括本主控節(jié)點在內(nèi)的主控節(jié)點的鄰居狀態(tài),從非初始狀態(tài)的主控節(jié)點中選舉全局主用主控節(jié)點,所述非初始狀態(tài)為單向狀態(tài)或雙向狀態(tài),其中,本地記錄的本主控節(jié)點的鄰居狀態(tài)默認(rèn)為雙向狀態(tài);
全局備選舉單元,用于從除全局主用主控節(jié)點以外的鄰居狀態(tài)為雙向狀態(tài)的主控節(jié)點中選舉全局備份主控節(jié)點。
由以上描述可以看出,本發(fā)明中各主控節(jié)點通過交互握手交互報文,實現(xiàn)鄰居主控節(jié)點的鄰居狀態(tài)的更新,并基于獲取的包括本主控節(jié)點在內(nèi)的主控節(jié)點的鄰居狀態(tài),完成全局主用主控節(jié)點和全局備份主控節(jié)點的選舉,該選舉過程報文交互簡單,涉及的鄰居狀態(tài)較少,易于實現(xiàn),可有效提高選舉效率。
附圖說明
圖1是本發(fā)明實施例示出的一種節(jié)點選舉方法流程圖;
圖2是本發(fā)明實施例示出的一種集群系統(tǒng)組網(wǎng)示意圖;
圖3是本發(fā)明實施例示出的一種握手交互報文的報文格式;
圖4是本發(fā)明實施例示出的主控節(jié)點的結(jié)構(gòu)示意圖;
圖5是本發(fā)明實施例示出的一種節(jié)點選舉裝置的結(jié)構(gòu)示意圖。
具體實施方式
這里將詳細(xì)地對示例性實施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
在本發(fā)明使用的術(shù)語是僅僅出于描述特定實施例的目的,而非旨在限制本發(fā)明。在本發(fā)明和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本發(fā)明可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本發(fā)明范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。
本發(fā)明實施例提出一種節(jié)點選舉方法,該方法通過在集群系統(tǒng)的主控節(jié)點間交互握手交互報文,實現(xiàn)鄰居主控節(jié)點的鄰居狀態(tài)的更新,并基于獲取的包括本主控節(jié)點在內(nèi)的主控節(jié)點的鄰居狀態(tài),完成全局主用主控節(jié)點和全局備份主控節(jié)點的選舉。
參見圖1,為本發(fā)明節(jié)點選舉方法的一個實施例流程圖,該實施例從主控節(jié)點側(cè)對節(jié)點選舉過程進(jìn)行描述。
步驟101,接收鄰居主控節(jié)點發(fā)送的握手交互報文。
本發(fā)明首先保證各主控節(jié)點間物理連接正常,且可正常通信。在此基礎(chǔ)上,各主控節(jié)點定時發(fā)送握手交互報文。
當(dāng)本主控節(jié)點接收到鄰居主控節(jié)點(本發(fā)明將集群系統(tǒng)中本主控節(jié)點以外的其它主控節(jié)點稱為本主控節(jié)點的鄰居主控節(jié)點)發(fā)送的握手交互報文時,可從握手交互報文中獲取鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài)。
下面對本發(fā)明涉及的幾種鄰居狀態(tài)進(jìn)行描述:
1)初始狀態(tài):表示鄰居主控節(jié)點未接收到本主控節(jié)點發(fā)送的握手交互報文;
2)單向狀態(tài):表示鄰居主控節(jié)點已接收到本主控節(jié)點發(fā)送的握手交互報文,但是鄰居主控節(jié)點感知本主控節(jié)點還未接收到鄰居主控節(jié)點發(fā)送的握手交互報文;
3)雙向狀態(tài):表示鄰居主控節(jié)點已接收到本主控節(jié)點發(fā)送的握手交互報文,同時,鄰居主控節(jié)點感知本主控節(jié)點也接收到了鄰居主控節(jié)點發(fā)送的握手交互報文。
步驟102,根據(jù)所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài),更新本地記錄的所述鄰居主控節(jié)點的鄰居狀態(tài)。
當(dāng)鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài)為初始狀態(tài)時,說明鄰居主控節(jié)點未接收到本主控節(jié)點發(fā)送的握手交互報文,但是,本主控節(jié)點當(dāng)前接收到了鄰居主控節(jié)點發(fā)送的握手交互報文,因此,更新本地記錄的鄰居主控節(jié)點的鄰居狀態(tài)為單向狀態(tài)。
當(dāng)鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài)為非初始狀態(tài)(單向狀態(tài)或雙向狀態(tài))時,說明鄰居主控節(jié)點已接收到本主控節(jié)點發(fā)送的握手交互報文,同時,由于本主控節(jié)點當(dāng)前接收到鄰居主控節(jié)點發(fā)送的握手交互報文,因此,更新本地記錄的鄰居主控節(jié)點的鄰居狀態(tài)為雙向狀態(tài)。
此外,當(dāng)本主控節(jié)點主動停止向鄰居主控節(jié)點定時發(fā)送握手交互報文時,或者本主控節(jié)點與鄰居主控節(jié)點之間的鏈路故障,或者在預(yù)設(shè)時間內(nèi)未接收到鄰居主控節(jié)點的握手交互報文時,均可更新鄰居主控節(jié)點的鄰居狀態(tài)為初始狀態(tài),以避免存在上述異常的主控節(jié)點參與后續(xù)選舉。
步驟103,根據(jù)本地記錄的包括本主控節(jié)點在內(nèi)的主控節(jié)點的鄰居狀態(tài),從非初始狀態(tài)的主控節(jié)點中選舉全局主用主控節(jié)點,從除全局主用主控節(jié)點以外的鄰居狀態(tài)為雙向狀態(tài)的主控節(jié)點中選舉全局備份主控節(jié)點。
需要說明的是,本主控節(jié)點默認(rèn)本地記錄的自身鄰居狀態(tài)為雙向狀態(tài),因此,本主控節(jié)點具備參與全局主用主控節(jié)點和全局備份主控節(jié)點的條件。
此外,本主控節(jié)點除了記錄本主控節(jié)點以及鄰近主控節(jié)點的鄰居狀態(tài)外,還在本地記錄本主控節(jié)點的節(jié)點信息以及鄰居主控節(jié)點的節(jié)點信息,其中,鄰居主控節(jié)點的節(jié)點信息從鄰居主控節(jié)點發(fā)送的握手交互報文中獲取,該節(jié)點信息包括節(jié)點角色、節(jié)點類型、框類型、框內(nèi)主控節(jié)點數(shù)目以及節(jié)點索引等,以用于全局主用主控節(jié)點和全局備份主控節(jié)點的選舉。
下面分別描述全局主用主控節(jié)點和全局備份主控節(jié)點的選舉過程:
全局主用主控節(jié)點選舉過程如下:
從本地記錄的鄰居狀態(tài)為非初始狀態(tài)的主控節(jié)點中選擇兩個主控節(jié)點參與本地主選舉(本主控節(jié)點所進(jìn)行的全局主用主控節(jié)點選舉),將兩個主控節(jié)點分別作為第一參選主控節(jié)點和第二參選主控節(jié)點;比較第一參選主控節(jié)點和第二參選主控節(jié)點,確定勝出的主控節(jié)點,將第一參選主控節(jié)點更新為勝出的主控節(jié)點;判斷本地記錄的鄰居狀態(tài)為非初始狀態(tài)的主控節(jié)點中是否存在未參與本地主選舉的主控節(jié)點,若是,從未參與本地主選舉的主控節(jié)點中選擇一個主控節(jié)點,將第二參選主控節(jié)點更新為該選中的主控節(jié)點,并重新比較第一參選主控節(jié)點和第二參選主控節(jié)點;若否,將勝出的主控節(jié)點的節(jié)點角色更新為全局主用主控節(jié)點。
其中,比較第一參選主控節(jié)點和第二參選主控節(jié)點,確定勝出的主控節(jié)點的過程,包括:
當(dāng)?shù)谝粎⑦x主控節(jié)點的節(jié)點角色和第二參選主控節(jié)點的節(jié)點角色均為非全局主用主控節(jié)點時,從第一參選主控節(jié)點和第二參選主控節(jié)點中選擇優(yōu)先級高的主控節(jié)點為勝出的主控節(jié)點,更新優(yōu)先級低的主控節(jié)點的節(jié)點角色為全局普通主控節(jié)點。
當(dāng)?shù)谝粎⑦x主控節(jié)點的節(jié)點角色和第二參選主控節(jié)點的節(jié)點角色均為全局主用主控節(jié)點時,從第一參選主控節(jié)點和第二參選主控節(jié)點中選擇被選中作為全局主用主控節(jié)點次數(shù)多的主控節(jié)點為勝出的主控節(jié)點,更新選中次數(shù)少的主控節(jié)點的節(jié)點角色為全局普通主控節(jié)點。
當(dāng)?shù)谝粎⑦x主控節(jié)點和第二參選主控節(jié)點中只有一個主控節(jié)點的節(jié)點角色為全局主用主控節(jié)點時,將節(jié)點角色為全局主用主控節(jié)點的主控節(jié)點作為勝出的主控節(jié)點,更新節(jié)點角色為非全局主用主控節(jié)點的主控節(jié)點的節(jié)點角色為全局普通主控節(jié)點。
至此,完成全局主用主控節(jié)點的選舉。從上述描述可以看出,經(jīng)過全局主用主控節(jié)點選舉后,集群系統(tǒng)中選舉出一個全局主用主控節(jié)點,其它鄰居狀態(tài)為非初始狀態(tài)的主控節(jié)點為全局普通主控節(jié)點。
全局備份主控節(jié)點選舉過程如下:
判斷集群系統(tǒng)是否存在指定的全局備份主控節(jié)點,當(dāng)存在指定的全局備份主控節(jié)點時,直接將指定的主控節(jié)點的節(jié)點角色更新為全局備份主控節(jié)點,結(jié)束全局備份主控節(jié)點的選舉;當(dāng)不存在指定的全局備份主控節(jié)點時,除全局主用主控節(jié)點,從本地記錄的鄰居狀態(tài)為雙向狀態(tài)的主控節(jié)點中選擇優(yōu)先級高的主控節(jié)點為勝出的主控節(jié)點,將勝出的主控節(jié)點的節(jié)點角色更新為全局備份主控節(jié)點。
至此,完成全局備份主控節(jié)點的選舉。在經(jīng)過全局備份主控節(jié)點選舉后,集群系統(tǒng)中選舉出一個全局主用主控節(jié)點、一個全局備份主控節(jié)點、其它主控節(jié)點為全局普通主控節(jié)點。
需要補(bǔ)充說明的是,在上述全局主用主控節(jié)點和全局備份主控節(jié)點的選舉過程中,均涉及到選擇優(yōu)先級高的主控節(jié)點為勝出的主控節(jié)點的步驟,該步驟具體包括:
當(dāng)主控節(jié)點的節(jié)點類型不同時,選擇節(jié)點類型為主用主控節(jié)點的主控節(jié)點為勝出的主控節(jié)點。例如,假設(shè)主控節(jié)點A的節(jié)點類型為備份主控節(jié)點,主控節(jié)點B的節(jié)點類型為主用主控節(jié)點,則主控節(jié)點B為勝出的主控節(jié)點。
當(dāng)主控節(jié)點的節(jié)點類型相同、框類型不同時,選擇框類型為交換框的主控節(jié)點為勝出的主控節(jié)點。例如,假設(shè)主控節(jié)點A和主控節(jié)點B的節(jié)點類型均為主用主控節(jié)點,主控節(jié)點A所在框的框類型為線卡框,主控節(jié)點B所在框的框類型為交換框,則主控節(jié)點B為勝出的主控節(jié)點。
當(dāng)主控節(jié)點的節(jié)點類型相同、框類型相同、框內(nèi)主控節(jié)點數(shù)目不同時,選擇框內(nèi)主控節(jié)點數(shù)目多的主控節(jié)點作為勝出的主控節(jié)點。例如,假設(shè)主控節(jié)點A和主控節(jié)點B的節(jié)點類型均為主用主控節(jié)點、框類型均為交換框,主控節(jié)點A所在框有一個主控節(jié)點,主控節(jié)點B所在框有兩個主控節(jié)點,則主控節(jié)點B為勝出的主控節(jié)點。
當(dāng)主控節(jié)點的節(jié)點類型相同、框類型相同、框內(nèi)主控節(jié)點數(shù)目相同時,選擇節(jié)點索引小的主控節(jié)點作為勝出的主控節(jié)點。例如,假設(shè)主控節(jié)點A和主控節(jié)點B的節(jié)點類型均為主用主控節(jié)點、框類型均為交換框、框內(nèi)均有兩個主控節(jié)點,主控節(jié)點A的節(jié)點索引為1,主控節(jié)點B的節(jié)點索引為2,則主控節(jié)點A為勝出的主控節(jié)點。
由以上描述可以看出,本發(fā)明通過簡單的報文交互,以及較少的鄰居狀態(tài)變化,解決了集群系統(tǒng)的選舉問題,該選舉過程簡單,選舉效率高。
現(xiàn)以圖2所示集群系統(tǒng)為例,詳細(xì)介紹節(jié)點選舉過程。
圖2所示集群系統(tǒng)包括5個主控節(jié)點,記為N1、N2、N3、N4、N5,各主控節(jié)點的節(jié)點索引分別為1、2、3、4、5。各主控節(jié)點定時發(fā)送握手交互報文,分別記為Hello1、Hello2、Hello3、Hello4、Hello5。
參見圖3,為握手交互報文格式示例,該握手交互報文中各字段說明如表1所示。
表1
對表1所示報文格式作進(jìn)一步說明:本發(fā)明中握手交互報文至少包括報文頭字段、第一TLV字段、第二TLV字段,其中,第一TLV字段用于攜帶發(fā)送該握手交互報文的主控節(jié)點的節(jié)點信息(包括節(jié)點角色、節(jié)點類型、框類型、框內(nèi)主控節(jié)點數(shù)目等信息);第二TLV字段用于攜帶發(fā)送該握手交互報文的主控節(jié)點感知的鄰居主控節(jié)點的鄰居狀態(tài)。表1中的第三TLV字段可由最終選舉出的全局主用主控節(jié)點填寫,填寫的全局主用主控節(jié)點的節(jié)點索引和全局備份主控節(jié)點的節(jié)點索引可作為后續(xù)功能完善使用,第三TLV字段的應(yīng)用不是本發(fā)明的重點,在此不贅述。
下面描述選舉過程:
假設(shè),N1發(fā)送Hello1,Hello1的源主控節(jié)點索引為1,在發(fā)送Hello1之前,N1未接收到N2、N3、N4以及N5的Hello報文,因此,本地記錄N2、N3、N4、N5的鄰居狀態(tài)為初始狀態(tài),默認(rèn)自身鄰居狀態(tài)為雙向狀態(tài),并N2、N3、N4、N5的節(jié)點索引和鄰居狀態(tài)攜帶在發(fā)送的Hello1中。參見表2,為N1本地記錄的各主控節(jié)點的鄰居狀態(tài)。
表2
N2接收到Hello1后,根據(jù)Hello1的源主控節(jié)點索引確定報文來自N1,再根據(jù)自身的節(jié)點索引找到Hello1中攜帶的本主控節(jié)點的鄰居狀態(tài),當(dāng)獲知Hello1中攜帶的本主控節(jié)點的鄰居狀態(tài)為初始狀態(tài)時,說明N1未接收到本主控節(jié)點發(fā)送的Hello報文,將本地記錄的N1的鄰居狀態(tài)更新為單向狀態(tài)。參見表3,為N2本地記錄的各主控節(jié)點的鄰居狀態(tài)。
表3
N2發(fā)送Hello2,攜帶本地記錄的N1、N3、N4、N5的鄰居狀態(tài)。
N1接收到Hello2后,獲取Hello2中攜帶的自身的鄰居狀態(tài)為單向狀態(tài),說明N2已經(jīng)接收到本主控節(jié)點發(fā)送的Hello報文,因此,更新本地記錄的N2的鄰居狀態(tài)為雙向狀態(tài)。參見表4,為更新后N1記錄的各主控節(jié)點的鄰居狀態(tài)。
表4
N1再次發(fā)送Hello1時,Hello1中攜帶本地記錄的N2、N3、N4、N5的鄰居狀態(tài)。
N2接收到Hello1后,獲取Hello1中攜帶的自身的鄰居狀態(tài)為雙向狀態(tài),因此,更新本地記錄的N1的鄰居狀態(tài)為雙向狀態(tài)。參見表5,為更新后N2記錄的各主控節(jié)點的鄰居狀態(tài)。
表5
同理,任意兩個主控節(jié)點之間的鄰居狀態(tài)更新過程相同,在此不再贅述。
當(dāng)?shù)竭_(dá)預(yù)設(shè)的選舉時間時,開始全局主用主控節(jié)點選舉,現(xiàn)以N1為例,介紹選舉過程。假設(shè)N1當(dāng)前記錄的鄰居狀態(tài)如表6所示。
表6
如前所述,握手交互報文中還攜帶節(jié)點信息,包括節(jié)點角色、節(jié)點類型、框類型、框內(nèi)主控節(jié)點數(shù)目等,因此,主控節(jié)點N1可本地記錄各主控節(jié)點的節(jié)點信息,如表7所示。
表7
選舉時,N1遍歷表7,首先比較N1(節(jié)點索引1)和N2(節(jié)點索引2),N1和N2的鄰居狀態(tài)均為雙向狀態(tài),節(jié)點角色均為未知主控節(jié)點(從來沒有參與過選舉的新節(jié)點),因此,比較優(yōu)先級,由表7可知,N1和N2的節(jié)點類型、框類型、框內(nèi)主控節(jié)點數(shù)目均相同,N1的節(jié)點索引小于N2的節(jié)點索引,因此,N1的優(yōu)先級高于N2的優(yōu)先級,N1作為勝出的主控節(jié)點繼續(xù)參與選舉,N2的節(jié)點角色更新為全局普通主控節(jié)點。
比較N1和N3(節(jié)點索引3),N3的鄰居狀態(tài)為雙向狀態(tài),可參與全局主用主控節(jié)點選舉,且N3的節(jié)點角色為全局主用主控節(jié)點,因此,選擇N3作為勝出的主控節(jié)點繼續(xù)參與選舉,將N1的節(jié)點角色更新為全局普通主控節(jié)點。
比較N3和N4(節(jié)點索引4),N4的鄰居狀態(tài)為單向狀態(tài),可參與全局主用主控節(jié)點選舉,N4和N3的節(jié)點角色相同,均為全局主用主控節(jié)點,此時,比較N4和N3被選中作為全局主用主控節(jié)點的次數(shù),N3被選中次數(shù)為5次,N4被選中次數(shù)為2次,因此,N3作為勝出的主控節(jié)點繼續(xù)參與選舉,將N4的節(jié)點角色更新為全局普通主控節(jié)點。
比較N3和N5(節(jié)點索引5),N5的鄰居狀態(tài)為初始狀態(tài),不能參與全局主用主控節(jié)點選舉,更新N5的節(jié)點角色為全局普通主控節(jié)點。
至此,完成對表7的遍歷,最終選擇N3為全局主用主控節(jié)點,節(jié)點角色更新后如表8所示。
表8
繼續(xù)選舉全局備份主控節(jié)點:判斷是否存在指定的全局備份主控節(jié)點,若存在指定的全局備份主控節(jié)點,則直接選擇被指定的全局備份主控節(jié)點;若不存在指定的全局備份主控節(jié)點,遍歷表8,選舉全局備份主控節(jié)點。
本實施例假定不存在指定的全局備份主控節(jié)點,則遍歷表8,比較N1和N2,N1和N2的鄰居狀態(tài)均為雙向狀態(tài),節(jié)點角色均為全局普通主控節(jié)點,因此,比較優(yōu)先級,如前所述,N1的優(yōu)先級高于N2的優(yōu)先級,因此,選擇N1繼續(xù)參與選舉。
比較N1和N3,N3為全局主用主控節(jié)點,因此,N3不再參與全局備份主控節(jié)點選舉,選擇N1繼續(xù)參與選舉。
比較N1和N4,N4的鄰居狀態(tài)為單向狀態(tài),不能參與全局備份主控節(jié)點選舉,選擇N1繼續(xù)參與選舉。
比較N1和N5,N5的鄰居狀態(tài)為初始狀態(tài),不能參與全局備份主控節(jié)點選舉,因此,最終選擇N1為全局備份主控節(jié)點,更新N1的節(jié)點角色。更新后N1中記錄的各主控節(jié)點的節(jié)點信息如表9所示。
表9
與前述節(jié)點選舉方法的實施例相對應(yīng),本發(fā)明還提供了節(jié)點選舉裝置的實施例。
本發(fā)明節(jié)點選舉裝置的實施例可以應(yīng)用在集群系統(tǒng)中的主控節(jié)點上。裝置實施例可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設(shè)備的處理器運行存儲器中對應(yīng)的計算機(jī)程序指令形成的。從硬件層面而言,如圖4所示,為本發(fā)明節(jié)點選舉裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖,除了圖4所示的處理器以及非易失性存儲器之外,實施例中裝置所在的設(shè)備通常根據(jù)該設(shè)備的實際功能,還可以包括其他硬件,對此不再贅述。
請參考圖5,為本發(fā)明一個實施例中的節(jié)點選舉裝置的結(jié)構(gòu)示意圖。該節(jié)點選舉裝置包括報文接收單元501、狀態(tài)更新單元502、全局主選舉單元503以及全局備選舉單元504,其中:
報文接收單元501,用于接收鄰居主控節(jié)點發(fā)送的握手交互報文,所述握手交互報文攜帶所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài);
狀態(tài)更新單元502,用于根據(jù)所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài),更新本地記錄的所述鄰居主控節(jié)點的鄰居狀態(tài);
全局主選舉單元503,用于根據(jù)本地記錄的包括本主控節(jié)點在內(nèi)的主控節(jié)點的鄰居狀態(tài),從非初始狀態(tài)的主控節(jié)點中選舉全局主用主控節(jié)點,所述非初始狀態(tài)為單向狀態(tài)或雙向狀態(tài),其中,本地記錄的本主控節(jié)點的鄰居狀態(tài)默認(rèn)為雙向狀態(tài);
全局備選舉單元504,用于從除全局主用主控節(jié)點以外的鄰居狀態(tài)為雙向狀態(tài)的主控節(jié)點中選舉全局備份主控節(jié)點。
進(jìn)一步地,
所述狀態(tài)更新單元502,具體用于當(dāng)所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài)為初始狀態(tài)時,更新所述鄰居主控節(jié)點的鄰居狀態(tài)為單向狀態(tài);當(dāng)所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài)為非初始狀態(tài)時,更新所述鄰居主控節(jié)點的鄰居狀態(tài)為雙向狀態(tài);當(dāng)本主控節(jié)點停止向所述鄰居主控節(jié)點發(fā)送握手交互報文時,或者本主控節(jié)點與所述鄰居主控節(jié)點之間的鏈路故障,或者在預(yù)設(shè)時間內(nèi)未接收到所述鄰居主控節(jié)點的握手交互報文時,更新所述鄰居主控節(jié)點的鄰居狀態(tài)為初始狀態(tài)。
進(jìn)一步地,
所述握手交互報文包括報文頭字段、第一TLV字段、第二TLV字段,所述第一TLV字段攜帶所述鄰居主控節(jié)點的節(jié)點信息,所述第二TLV字段攜帶所述鄰居主控節(jié)點感知的本主控節(jié)點的鄰居狀態(tài);其中,所述節(jié)點信息包括節(jié)點角色,所述裝置還包括:
信息記錄單元,用于在本地記錄本主控節(jié)點的節(jié)點信息和所述鄰居主控節(jié)點的節(jié)點信息。
進(jìn)一步地,所述全局主選舉單元503,包括:
節(jié)點選擇模塊,用于從本地記錄的鄰居狀態(tài)為非初始狀態(tài)的主控節(jié)點中選擇兩個主控節(jié)點參與本地主選舉,將所述兩個主控節(jié)點分別作為第一參選主控節(jié)點和第二參選主控節(jié)點;
節(jié)點比較模塊,用于比較第一參選主控節(jié)點和第二參選主控節(jié)點,確定勝出的主控節(jié)點,將第一參選主控節(jié)點更新為勝出的主控節(jié)點;
節(jié)點判斷模塊,用于判斷本地記錄的鄰居狀態(tài)為非初始狀態(tài)的主控節(jié)點中是否存在未參與本地主選舉的主控節(jié)點,若是,從未參與本地主選舉的主控節(jié)點中選擇一個主控節(jié)點,將第二參選主控節(jié)點更新為該選中的主控節(jié)點,并重新比較第一參選主控節(jié)點和第二參選主控節(jié)點;若否,將勝出的主控節(jié)點的節(jié)點角色更新為全局主用主控節(jié)點。
進(jìn)一步地,
所述節(jié)點比較模塊,具體用于當(dāng)?shù)谝粎⑦x主控節(jié)點的節(jié)點角色和第二參選主控節(jié)點的節(jié)點角色均為非全局主用主控節(jié)點時,從第一參選主控節(jié)點和第二參選主控節(jié)點中選擇優(yōu)先級高的主控節(jié)點為勝出的主控節(jié)點,更新優(yōu)先級低的主控節(jié)點的節(jié)點角色為全局普通主控節(jié)點;當(dāng)?shù)谝粎⑦x主控節(jié)點的節(jié)點角色和第二參選主控節(jié)點的節(jié)點角色均為全局主用主控節(jié)點時,從第一參選主控節(jié)點和第二參選主控節(jié)點中選擇被選中作為全局主用主控節(jié)點次數(shù)多的主控節(jié)點為勝出的主控節(jié)點,更新選中次數(shù)少的主控節(jié)點的節(jié)點角色為全局普通主控節(jié)點;當(dāng)?shù)谝粎⑦x主控節(jié)點和第二參選主控節(jié)點中只有一個主控節(jié)點的節(jié)點角色為全局主用主控節(jié)點時,將節(jié)點角色為全局主用主控節(jié)點的主控節(jié)點作為勝出的主控節(jié)點,更新節(jié)點角色為非全局主用主控節(jié)點的主控節(jié)點的節(jié)點角色為全局普通主控節(jié)點。
進(jìn)一步地,
所述全局備選舉單元504,具體用于當(dāng)不存在指定的全局備份主控節(jié)點時,除全局主用主控節(jié)點,從本地記錄的鄰居狀態(tài)為雙向狀態(tài)的主控節(jié)點中選擇優(yōu)先級高的主控節(jié)點為勝出的主控節(jié)點,將勝出的主控節(jié)點的節(jié)點角色更新為全局備份主控節(jié)點。
進(jìn)一步地,
所述節(jié)點信息還包括節(jié)點類型、框類型、框內(nèi)主控節(jié)點數(shù)目以及節(jié)點索引;
所述節(jié)點比較模塊或所述全局備選舉單元504選擇優(yōu)先級高的主控節(jié)點為勝出的主控節(jié)點,具體包括:
當(dāng)主控節(jié)點的節(jié)點類型不同時,選擇節(jié)點類型為主用主控節(jié)點的主控節(jié)點為勝出的主控節(jié)點;當(dāng)主控節(jié)點的節(jié)點類型相同、框類型不同時,選擇框類型為交換框的主控節(jié)點為勝出的主控節(jié)點;當(dāng)主控節(jié)點的節(jié)點類型相同、框類型相同、框內(nèi)主控節(jié)點數(shù)目不同時,選擇框內(nèi)主控節(jié)點數(shù)目多的主控節(jié)點作為勝出的主控節(jié)點;當(dāng)主控節(jié)點的節(jié)點類型相同、框類型相同、框內(nèi)主控節(jié)點數(shù)目相同時,選擇節(jié)點索引小的主控節(jié)點作為勝出的主控節(jié)點。
上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應(yīng)于方法實施例,所以相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本發(fā)明方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。