Nacos 集群的工作原理


Nacos 集群的工作原理

Nacos 集群中 Leader 節點是如何產生的?

Nacos 集群采用 Raft 算法實現。它是一種比較簡單的選舉算法,用於選舉出 Nacos 集群中最重要的 Leader(領導)節點。

在 Nacos 集群中,每個節點都擁有以下三種角色中的一種。

  1. Leader:領導者,集群中最重要的角色,用於向其他節點下達指令。

  2. Candidate:參選者,參與競選 Leader 的節點。

  3. Follower:跟隨者,用於接收來自 Leader 或者 Candidate 的請求並進行處理。

在集群中選舉出 Leader 是最重要的工作,產生選舉的時機有三個:

  1. 在 Nacos 節點啟動后,還沒有產生Leader時選舉;

  2. 集群成員總量變更時重新選舉;

  3. 當 Leader 停止服務后重新選舉;

在開始介紹選舉過程前,先理解任期(Term)的含義:

Raft 算法將時間划分成為任意不同長度的任期(Term)。任期用連續的數字進行表示。每一個任期的開始都是一次選舉(Election),一個或多個候選人會試圖成為 Leader。

為了便於理解,我們使用文字+表格的形式說明選舉過程。

  1. 當最開始的時候,所有 Nacos 節點都沒有啟動。角色默認為 Follower(跟隨者),任期都是 0。

 

  1. 當第一個節點(192.168.163.131)啟動后,節點角色會變為 Candidate(參選者),131 節點在每一個任期開始時便會嘗試向其他節點發出投票請求,征求自己能否成為 Leader(領導者)節點。只有算上自己獲得超過半數的選票,這個 Candidate 才能轉正為 Leader。在當前案例,因為 131 發起選舉投票,但 132/133 兩個節點不在線,盡管 131 會投自己一票,但在總 3 票中未過半數,因此無法成為 Leader。因為第一次選舉沒有產生 Leader,過段時間在下一個任期開始時,131 任期自增加 1,同時會再次向其他節點發起投票請求爭取其他節點同意,直到同意票過半。

Nacos 集群的工作原理

  1. 在 Raft 算法中,成為 Leader 的必要條件是某個 Candidate 獲得過半選票,如果 132 節點上線,遇到 131 再次發起投票。132 投票給 131 節點,131 獲得兩票超過半數就會成為 Leader,132 節點自動成為 Follower(跟隨者)。之后 133 節點上線,因為集群中已有 Leader,因此自動成為 Follower。

Nacos 集群的工作原理

  1. 當 Leader 節點宕機或停止服務,會在剩余 2 個 Nacos 節點中產生新的 Leader。如下所示133獲得兩票成為 Leader,132 成為 Follower,131已經下線但角色暫時仍為 Leader。

Nacos 集群的工作原理

之后 131 恢復上線,但此時 Nacos 集群已有 Leader 存在,131 自動變為 Follower,且任期歸0。

 

對於 Nacos 集群來說,只要 UP 狀態節點不少於"1+N/2",集群就能正常運行。但少於“1+N/2”,集群仍然可以提供基本服務,但已無法保證 Nacos 各節點數據一致性。

以上就是 Nacos 基於 Raft 算法的 Leader 選舉過程,確定 Leader 是維持 Nacos 集群數據一致的最重要前提,下面咱們來講解在微服務注冊時 Nacos 集群節點信息同步的過程。

Nacos 節點間的數據同步過程

 

Nacos 節點間的數據同步過程

在 Raft 算法中,只有 Leader 才擁有數據處理與信息分發的權利。因此當微服務啟動時,假如注冊中心指定為 Follower 節點,則步驟如下:

第一步,Follower 會自動將注冊心跳包轉給 Leader 節點;

第二步,Leader 節點完成實質的注冊登記工作;

第三步,完成注冊后向其他 Follower 節點發起“同步注冊日志”的指令;

第四步,所有可用的 Follower 在收到指令后進行“ack應答”,通知 Leader 消息已收到;

第五步,當 Leader 接收過半數 Follower 節點的 “ack 應答”后,返回給微服務“注冊成功”的響應信息。

此外,對於其他無效的 Follower 節點,Leader 仍會不斷重新發送,直到所有 Follower 的狀態與 Leader 保持同步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM