[發明專利]基于Gossip通信協議和Raft選舉算法的優化方法有效
| 申請號: | 201710004354.7 | 申請日: | 2017-01-04 |
| 公開(公告)號: | CN106656624B | 公開(公告)日: | 2019-05-14 |
| 發明(設計)人: | 顧乃杰;黃增士;李燚;郝建林;朱方祥;王芬 | 申請(專利權)人: | 合肥康捷信息科技有限公司 |
| 主分類號: | H04L12/24 | 分類號: | H04L12/24;H04L29/08 |
| 代理公司: | 安徽省合肥新安專利代理有限責任公司 34101 | 代理人: | 陸麗莉;何梅生 |
| 地址: | 230088 安徽省合肥市高新區黃山路602*** | 國省代碼: | 安徽;34 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 gossip 通信協議 raft 選舉 算法 優化 方法 | ||
1.一種基于Gossip通信協議和Raft選舉算法的優化方法,是應用于由N×(n+1)個節點組成的Redis集群中,所述節點是運行在集群模式下的Redis服務器,并分為N個主節點和N×n個從節點,任意一個主節點分別對應于n個從節點,由一個主節點及其對應的n個從節點構成一個分片;其特征是,所述優化方法按如下步驟進行:
步驟1、全局定義:
定義所述N個主節點構成的主節點集合為{M1,M2,…,Mi,…,MN},Mi表示第i個主節點;1≤i≤N;
定義所述第i個主節點Mi的從節點集合為{Si1,Si2,…,Sij,…,Sin},Sij表示第i個主節點Mi所對應的第j個從節點;1≤j≤n;
定義Redis集群中的所有節點集合為{N1,N2,…,Nk,…,NN×(n+1)},Nk表示第k個節點,1≤k≤N×(n+1);
定義保存所述第k個節點Nk詳細狀態信息的結構體為第k個狀態結構體CNk;
定義保存并維護所述第k個節點Nk對Redis集群認知的結構體為第k個認知結構體CSk,所述第k個認知結構體CSk中所保存的信息包括:當前紀元、上一次投票紀元和Redis集群中所有節點的狀態結構體;定義第k個認知結構體CSk中的當前紀元記為CEk、上一次投票紀元記為LEk、所有節點的狀態結構體所組成的鏈表為NOk;
定義任意第p個節點Np和第q個節點Nq之間周期性的通信消息為PING/PONG消息;1≤p,q≤N×(n+1);p≠q;
所述第p個節點Np發送的PING/PONG消息中攜帶自身的狀態信息和相應的Gossip單元;定義所述Gossip單元包含w條Gossip消息;每條Gossip消息對應一個其他節點的狀態信息,通過Redis集群中的PING/PONG消息傳播,所述第p個節點Np更新自身的認知結構體CSp;
定義節點間的通信超時時間為T;
定義所述Redis集群中的所有節點分為三種狀態,包括:在線狀態、疑似下線狀態、下線狀態;
在線狀態表示第p個節點Np在發送PING消息后,在通信超時時間T內收到接收第q個節點Nq的PONG消息,則第q個節點Nq認為第p個節點Np處于在線狀態;
疑似下線狀態表示第p個節點Np在發送PING消息后,在通信超時時間T內沒有收到接收第q個節點Nq的PONG消息,則第p個節點Np認為第q個節點Nq處于疑似下線狀態;
下線狀態表示第p個節點Np發現超過個主節點認為第q個節點Nq處于疑似下線狀態,則第p個節點Np認為第q個節點Nq處于下線狀態,并將第q個節點Nq的下線消息廣播給其他節點;
定義在Redis集群中第k個節點Nk的鏈表NOk中處于疑似下線狀態的節點數為uk;
定義選取次數為r,并初始化r=1;
步驟2、第k個節點Nk每秒鐘固定向其他m個接收節點發送PING消息;
步驟3、基于Gossip通信協議優化方法對m的值和接收節點的選取方式進行更改:
步驟3.1、令
步驟3.2、第k個節點Nk在Redis集群中未選取的節點內第r次隨機選取一個預接收節點,判斷所述預接收節點與第k個節點Nk之間中斷PING/PONG通信的時間是否超過T/2,若超過,則將所述預接收節點作為接收節點;否則,丟棄所述預接收節點;
步驟3.3、將r+1賦值給r,并返回步驟3.2執行,直到r=m+1為止,從而獲得m1個接收節點;
步驟3.4、判斷m1=m是否成立,若成立,則執行步驟3.8,否則執行步驟3.5;
步驟3.5、初始化r=1;
步驟3.6、第k個節點Nk在Redis集群中未選取的節點內第r次隨機選取一個接收節點;
步驟3.7、將r+1賦值給r,并返回步驟3.6執行,直到r=m-m1+1為止,從而獲得m-m1個接收節點;
步驟3.8、第k個節點Nk向m個接收節點發送PING消息;
步驟4、主節點M′故障后,第k個節點Nk向主節點M′發送PING消息,并在通信超時時間T內未收到主節點M′的PONG消息,則第k個節點Nk認為主節點M′處于疑似下線狀態,并將所述主節點M′的狀態信息作為一條Gossip消息添加到PING/PONG消息的Gossip單元中,并發送給其他節點,從而告知其他節點主節點M′處于疑似下線狀態;
步驟5、通過PING/PONG消息的傳播,主節點M′的疑似下線消息會在Redis集群中擴散,基于Gossip通信協議的優化方法對w的值和Gossip單元的選取方式進行更改:
步驟5.1、令wk=w+uk;
步驟5.2、第k個節點Nk標記uk個處于疑似下線狀態的節點,并將所述uk個節點的狀態信息優先添加到自身PING/PONG消息的Gossip單元中;
步驟5.3、第k個節點Nk在未選取的節點中隨機選取w個節點,并將所述w個節點的狀態信息優先添加到自身PING/PONG消息的Gossip單元中;從而共選取w+uk個節點作為wk個Gossip消息添加到Gossip單元中;
步驟6、通過PING/PONG消息的傳播,第p個節點Np發現超過個主節點認為主節點M′處于疑似下線狀態,則第p個節點Np認為主節點M′處于下線狀態,并將主節點M′的下線消息廣播給其他節點;從而使得主節點M′處于下線狀態的消息在Redis集群中傳播;
步驟7、假設發生故障的主節點M′所對應的主節點為第i個主節點Mi;則當從節點集合{Si1,Si2,…,Sij,…,Sin}接收到的PING/PONG消息中包含主節點M′處于下線狀態的信息時,第j個從節點Sij向所有節點發起投票請求;
步驟8、第k個節點Nk接收到所述第j個從節點Sij的投票請求,則基于Raft選舉算法對投票方式進行更改:
步驟8.1、第k個節點Nk將認知結構體CSk上的當前紀元CEk和上一次投票紀元LEk保存到鏈表NOk的所有狀態結構體中;從而使得所有狀態結構體中均保存各自的當前紀元和上一次投票紀元;
步驟8.2、若第k個節點Nk是主節點,則獲得發生故障的主節點M′在所有節點中所在的位置z后,第k個節點Nk通過認知結構體CSk保存的第z個狀態結構體CNz上的當前紀元和上一次投票紀元來判斷是否發送支持票給第j個從節點Sij;若第k個節點Nk是從節點,則第k個節點Nk對投票請求不做任何處理;
步驟9、當第j個從節點Sij接收到個主節點的支持票時,第j個從節點Sij升為新的主節點,代替原來主節點的功能,并通過廣播PING消息告知所有的其他節點,從而使得Redis集群中所有節點得知第j個從節點Sij升為主節點;
步驟10、Redis集群恢復成功。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于合肥康捷信息科技有限公司,未經合肥康捷信息科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710004354.7/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:指紋測量參考模板
- 下一篇:手掌特征圖像采集裝置





