簡體   English   中英

RAFT領導人選舉算法一票代表?

[英]Raft leader election algorithm one vote for term?

我對理解 Raft 算法的領導者選舉算法有疑問。 在論文中,我讀到每個節點 con 每個任期只投一票。 我的疑惑是因為每個節點里面的term可以不一樣,指的是請求投票的節點term還是給節點的節點term? 謝謝

在 raft 集群中,讓我們有一個想要成為領導者的節點並將其稱為候選者。 所有其他節點,包括當前領導者,我們將簡稱為對等節點。

讓我們看看當一個節點從候選人那里收到RequestVoteRPC時會發生什么。

如果對等方的任期大於請求中收到的任期(候選人任期),則投票將被拒絕。 響應將包含對等方的任期,因此候選人將轉換為關注者 state 並在收到響應后立即更新其任期。 這將確保請求投票的節點的任期與投票的節點的任期相同。

否則對等點需要決定做什么。

如果對等方的任期小於請求中收到的任期(候選人任期),則該對等方將轉換為追隨者,並將其當前任期更新為從候選人那里收到的任期,然后再繼續做出決定。 這將確保請求投票的節點的任期與投票的節點的任期相同。

有可能多個節點轉換為候選人 state,而我們正在觀察的節點已經投票給候選人。 在那種情況下, votedFor變量將不是null ,我們不能將投票授予第二個(或任何其他)候選人。 但我們在這里也需要小心,因為我們可能會收到重復的RequestVoteRPC請求(來自同一候選人),因此我們需要檢查votedFor是否等於我們正在觀察其請求的候選人 ID。 如果votedFor等於當前候選人 ID,我們將授予投票權。

總而言之,如果votedFor變量為null或等於候選人 ID,我們將授予投票。

我故意排除了示例中的條件,即為了授予投票,候選人日志至少需要是最新的,但不要忘記這也很重要。

每個節點在一個任期內可以投一票,並且由於條款將在通信期間同步,因此投票的節點的任期將與要求投票的任期相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM