2016-05-17 90 views
1

我正在從Raft paper從頭學習木筏,我無法理解領導人選舉過程。RAFT選舉限制

筏使用更簡單的方法它保證了從以前的所有方面承諾的條目是存在於每個:我在5.4.1,一個領導者需要在其日誌在羣集中的所有承諾條目讀新領導 從其當選之日起,無需將這些 條目轉移給領導。

Raft使用投票過程來阻止候選人贏得選舉,除非其日誌包含所有提交的條目。

但後來,據說候選保存所有提交的項目,如果它至少高達最新任何其他日誌中的大多數。確定最新條目的機制是比較最後條目的索引和條款。最後一個條目的較高期限的日誌將更新。

難道這不會導致領導者被選舉而沒有所有先前承諾的條目嗎?例如:

enter image description here

在這種情況下,如果服務器4失敗,服務器2有可能成爲領導者,因爲它具有比大多數更大的期限的條目。但是它的日誌中沒有第2項中的兩個承諾條目。是嗎?我誤解了一些東西,但我可以得到它是什麼...

回答

2

問題是,日誌是如何進入該狀態的?這是不可能的。

所以,它看起來像:

* Server 2 is leader for term 1 
* Server 1 is leader for term 2 
* Server 2 (perhaps) is leader for term 3 
* Server 4 is leader for term 4 

但是服務器2,因爲它沒能基於一個事實,在其日誌中的最後一項本來票已經不能爲第三學期的領導者從術語1開始。如果另一臺服務器是術語3的領導者,那麼如果在服務器2的日誌中有術語3的條目,則它必須在其日誌中寫入術語3的條目。但是如果在另一臺服務器的日誌中有第三項的另一項,那麼第二項的服務器就不可能被選中,因爲只有其中的兩項。即使服務器3在其日誌中有第2項的條目,也不能在該位置選出它,因爲在日誌中的較高索引處仍然會有三個其他服務器的條目2來自條目2。

因此,我認爲您需要描述集羣如何進入服務器2可能贏得選舉的狀態,該選舉會將第3項的條目放入索引4的日誌中。重要的是要注意選舉協議不僅僅是關於術語,它也是關於索引。如果兩臺服務器的最後一項具有相同的術語,則具有較大最後一項索引的服務器被認爲是更新的。

+0

我明白你說什麼,但我的問題是不同的。例如,在你剛剛列出的例子中,我沒有得到的是服務器2如何成爲術語3的領導者(據推測),當術語2的兩個第一項可能被提交時。 – vandermies

+0

服務器2不能成爲術語3的領導者。在選舉期間,服務器2的最後一個術語將是1.服務器2不能被選爲術語3,因爲大多數其他服務器 - 服務器1,4和5 - 具有條目從他們的日誌中的術語2開始。這是我的觀點。這個歷史是不可能的。 – kuujo

+0

好的,只是爲了確保我能得到它:限制條件是成爲服務器的領導者必須擁有所有承諾的條目,然後通過在投票期間研究其他日誌的條款和索引間接實施。不是由任何說明哪些條目已提交的變量?那是對的嗎? – vandermies