zookeeper的集群選舉

2021-09-24 02:11:28 字數 966 閱讀 5221

集群選舉型別:全新集群選舉與非全新集群選舉。

全新集群選舉:假設現在有5臺伺服器均沒有資料,它們的編號分別是1,2,3,4,5,按編號依次啟動。過程如下:

1. 伺服器 1 啟動,給自己投票,然後發投票資訊給其他伺服器,由於其他伺服器沒有啟動,所以它收不到反饋資訊,但是由於投票還沒有到達半數(伺服器 1 怎麼知道一共有多少臺伺服器參與選舉呢, 那是因為在zk配置檔案中配置了集群資訊,所有配置了3888埠的伺服器均會參與投票,假設這5臺都參與投票,則超過半數應為至少3臺伺服器參與投票。),所以伺服器 1 的狀態一直處於 looking。

2. 伺服器 2 啟動, 給自己投票,然後與其他服務投票資訊交換結果, 由於伺服器 2 的編號大於伺服器 1, 所以伺服器 2 勝出,但是由於投票仍未到達半數,所以伺服器 2 同樣處於 looking 狀態。

3. 伺服器 3 啟動, 給自己投票,然後與其他服務投票資訊交換結果, 由於伺服器 3 的編號大於伺服器 2,1,所以伺服器 3勝出, 並且此時投票數正好大於半數, 所以選舉結束,伺服器 3 處於leading 狀態, 伺服器 1, 伺服器 2 處於 following 狀態。

4. 伺服器 4 啟動, 給自己投票, 同時與之前的伺服器 1 ,2,3交換資訊,儘管伺服器 4 的編號最大,但之前伺服器 3 已經勝出,所以伺服器 4 只能處於 following 狀態。

5. 伺服器 5 啟動, 同上。following狀態。

非全新集群選舉:對於執行正常的zookeeper集群,中途有機器down掉,需要重新選舉時,選舉過程就需要加入資料id、伺服器id、和邏輯時鐘。

1.邏輯時鐘小的選舉結果被忽略,重新投票;(除去選舉次數不完整的伺服器)

2.統一邏輯時鐘後,資料id大的勝出;(選出資料最新的伺服器)

3.資料id相同的情況下,伺服器id大的勝出。(資料相同的情況下, 選擇伺服器id最大,即權重最大的伺服器)

Zookeeper集群選舉機制

zookeeper預設的演算法是fastleaderelection,採用投票數大於半數則勝出的邏輯。選舉依據 伺服器id 比如有3臺伺服器,編號分別為 1,2,3。編號越大,在選舉演算法中的權重越大。選舉狀態 looking,競選狀態。following,隨從狀態。同步leader狀態,參與投票。...

Zookeeper選舉原理

作為乙個分布式應用程式協調服務,在大型 中,其本身也是集群部署的,安裝zookeeper的時候最好是單數節點,因為要選舉。zookeeper的leader節點是集群工作的核心,用來更新並保證leader和server具有相同的系統狀態,follower伺服器是leader的跟隨者,用於接收客戶端的請...

zookeeper選舉機制

fastleaderelection演算法通過非同步的通訊方式來收集其它節點的選票,同時在分析選票時又根據投票者的當前狀態來作不同的處理,以加快leader的選舉程序。每個在zookeeper伺服器啟動先讀取當前儲存在磁碟的資料,zookeeper中的每份資料都有乙個對應的id值,這個值是依次遞增的...