ZooKeeper技術內幕 Leader選舉

2021-08-20 09:51:08 字數 1100 閱讀 9019

leader選舉的實現細節

每台伺服器啟動的時候,都會啟動乙個quorumcnxmanager,負責各台伺服器之間底層的leader選舉過程中的網路通訊。

1. 自增選舉輪次

在fastleaderelection實現中,有乙個logicalclock屬性,用於標識當前leader的選舉輪次,zookeeper規定了所有有效的投票都必須在同一輪次中。zookeeper在開始新一輪的投票時,會首先對logicallock進行自增操作

2. 初始化選票

初始化vote資料結構

3. 傳送初始化選票

伺服器發起第一次投票。zookeeper會將剛剛初始化的vote放入sendqueue佇列中,由傳送器workersender負責傳送出去。

4. 接收外部選票

每台伺服器會不斷地從recvqueue佇列中獲取外部投票。如果伺服器發現無法獲取到任何的外部投票,那麼就會立刻確認自己是否和集群中其他伺服器保持有效連線;如果發現沒有建立連線,就會建立連線,並再次傳送自己當前的內部投票。

5. 判斷選舉輪次

根據選舉的輪次處理外部投票

注意,只有在同一選舉輪次的投票才是有效的投票

6.  選票pk

7. 變更投票

通過選票pk之後,如果確定了外部投票優於內部投票(所謂的「優於」,是指外部投票所推舉的伺服器更適合成為leader),那麼進行投票變更——使用外部投票的選票資訊來覆蓋內部投票。變更完成之後,再次將這個變更的內部投票傳送出去。

8. 選票歸檔

無論是否進行了投票變更,都會將剛剛收到的那份外部投票放入「選票集合」recvset中進行歸檔,recvset用於記錄當前伺服器在本輪次中的leader選舉中收到的所有外部投票——按照伺服器對應的sid來區分,例如

9. 統計投票

完成了選票歸檔之後,進行統計投票。如果確認已經有過半的伺服器認可了該內部投票,則終止投票。否則返回步驟4。

10. 更新伺服器狀態

統計投票後,如果已經確定可以終止投票,那麼就開始更新伺服器狀態。伺服器首先判斷當前被過半伺服器認可的投票所對應的leader伺服器是否是自己,不過是自己的話,那麼就會將自己的伺服器狀態更新為leading;否則,根據情況來確定自己是following或者是observing。

MySQL技術內幕

innodb儲存引擎是事物安全的儲存引擎。innodb儲存引擎有多個記憶體塊,這些記憶體塊組成乙個很大的記憶體池,負責如下的工作 後台執行緒 innodb儲存引擎是多執行緒模型,因此他有多個不同的後台執行緒,負責處理不同的任務。記憶體日誌檔案 記錄mysql對某種條件做出響應時的檔案,如錯誤日誌檔案...

Springboot技術內幕

首先spring的技術內幕,看下springboot的啟動過程,監控springioc的呼叫過程。記錄程式執行時間 stopwatch stopwatch new stopwatch stopwatch.start collectionexceptionreporters new arraylist...

VC技術內幕總結

vc技術內幕總結 對技術內幕的學習,主要是集中在前三部分和後面com,odbc的學習,感覺這本書還是寫得不錯的,分析的也比較清晰,例子不錯,有很多細節的小技巧值得我們推敲,結合深入淺出mfc學習,相信會對mfc會有很多,如果非要說缺點的話,就是太厚了,呵呵 由於這裡只是總結,並沒有對在學習過程中的細...