伺服器啟動時的leader選舉

2021-10-17 03:22:27 字數 1039 閱讀 1432

每個節點啟動的時候狀態都是looking,處於觀望狀態,接下來就開始進行選主流程 

若進行leader選舉,則至少需要兩台機器,這裡選取3臺機器組成的伺服器集群為例。在集群初始化階段,當有一台伺服器server1啟動時,其單獨無法進行和完成leader選舉,當第二台伺服器server2啟動時,此時兩台機器可以相互通訊,每台機器都試圖找到leader,於是進入leader選舉過程。選舉過程如下

(1) 每個server發出乙個投票。由於是初始情況,server1和server2都會將自己作為leader伺服器來進行投票,每次投票會包含所推舉的伺服器的myid和zxid、epoch,使用(myid, zxid,epoch)來表示,此時server1的投票為(1, 0),server2的投票為(2, 0),然後各自將這個投票發給集群中其他機器。

(2) 接受來自各個伺服器的投票。集群的每個伺服器收到投票後,首先判斷該投票的有效性,如檢查是否是本輪投票(epoch)、是否來自looking狀態的伺服器。

(3) 處理投票。針對每乙個投票,伺服器都需要將別人的投票和自己的投票進行pk,pk規則如下 

i. 優先比較epoch

ii. 其次檢查zxid。zxid比較大的伺服器優先作為leader 

iii. 如果zxid相同,那麼就比較myid。myid較大的伺服器作為leader伺服器。

對於server1而言,它的投票是(1, 0),接收server2的投票為(2, 0),首先會比較兩者的zxid,均為0,再比較myid,此時server2的myid最大,於是更新自己的投票為(2, 0),然後重新投票,對於server2而言,其無須更新自己的投票,只是再次向集群中所有機器發出上一次投票資訊即可。

(4) 統計投票。每次投票後,伺服器都會統計投票資訊,判斷是否已經有過半機器接受到相同的投票資訊,對於server1、server2而言,都統計出集群中已經有兩台機器接受了(2, 0)的投票資訊,此時便認為已經選出了leader。

(5) 改變伺服器狀態。一旦確定了leader,每個伺服器就會更新自己的狀態,如果是follower,那麼就變更為following,如果是leader,就變更為leading。

tomcat伺服器在debug啟動時很慢

ssh專案,tomcat伺服器在debug啟動時很慢,通過瀏覽器訪問乙個action也相對較慢 卡在初始化spring配置檔案那裡 通過查詢資料發現是猶豫斷點的問題,將斷點全部去掉後恢復正常.引 這個問題可能是由於eclipse和tomcat的互動而產生的,在以debug模式啟動tomcat時,發生...

Oracle的Window服務啟動時並不啟動例項

在window服務啟動時並不啟動例項的兩種方法 1 通過oradim startup 引數設定,如下 a.檢視oradim幫助 c documents and settingsadministrator oradim help dim 00002 有效的命令包括 delete,edit,new,st...

Oracle的Window服務啟動時並不啟動例項

在window服務啟動時並不啟動例項的兩種方法 1 通過oradim startup 引數設定,如下 a.檢視oradim幫助 c documents and settingsadministrator oradim help dim 00002 有效的命令包括 delete,edit,new,st...