Zookeeper Zookeeper的選舉機制

2021-09-29 18:05:15 字數 1641 閱讀 5336

0、為什麼要進行leader選舉?

**leader 主要作用是保證分布式資料一致性,即每個節點的儲存的資料同步。**遇到以下兩種情況需要進行leader選舉:

1)伺服器初始化啟動

2)伺服器執行期間無法和leader保持連線,leader節點崩潰,邏輯時鐘崩潰。

1、伺服器初始化時leader選舉

zookeeper由於其自身的性質(半數存活機制),一般建議選取奇數個節點進行搭建分布式伺服器集群。以3個節點組成的伺服器集群為例,說明伺服器初始化時的選舉過程。啟動第一台安裝zookeeper的節點時,無法單獨進行選舉,啟動第二台時,兩節點之間進行通訊,開始選舉leader。

1)每個server投出一票。他們兩都選自己為leader,投票的內容為(sid,zxid)。sid即server的id,安裝zookeeper時配置檔案中所配置的myid;zxid,事務id,為節點的更新程度,zxid越大,代表server對znode的操作越新。由於伺服器初始化,每個sever上的znode為0,所以server1投的票為(1,0),server2為(2,0)。

兩server將各自投票發給集群中其他機器。

2)每個server接收來自其他server的投票。集群中的每個server先判斷投票有效性,如檢查是不是本輪的投票,是不是來looking狀態的伺服器投的票。

3)對投票結果進行處理。先了解下處理規則

對於server1而言,他接受到的投票為(2,0),因為自身的票為(1,0),所以此時它會選舉server2為leader,

將自己的票更新為(2,0)。而server2收到的投票為server1的(1,0)由於比他自己小,server2的投票不變。server1和server2再次將票投出,投出的票都為(2,0)。

4) 統計投票。每次投票之後,伺服器都會統計投票資訊,如果判定某個server有過半的票數投它,

那麼該server將會作為leader。對於server1和server2而言,統計出已經有兩台機器接收了(2,0)的投票資訊,

此時認為選出了leader。

5)改變伺服器狀態。當確定了leader之後,每個server更新自己的狀態,leader將狀態更新為leading,follower將狀態更新為following。

2.伺服器執行期間的leader選舉

zookeeper執行期間,如果有新的server加入,或者非leader的server宕機,那麼leader將會同步資料到新server或者尋找其他備用server替代宕機的server。若leader宕機,此時集群暫停對外服務,開始在內部選舉新的leader。假設當前集群中有server1、server2、server3三颱伺服器,server2為當前集群的leader,由於意外情況,server2宕機了,便開始進入選舉狀態。過程如下

1) 變更狀態。其他的非observer伺服器將自己的狀態改變為looking,開始進入leader選舉。

2) 每個server發出乙個投票(myid,zxid),由於此集群已經執行過,所以每個server上的zxid可能不同。

假設server1的zxid為145,server3的為122,第一輪投票中,server1和server3都投自己,

票分別為(1,145)、(3,122),將自己的票傳送給集群中所有機器。

3) 每個server接收接收來自其他server的投票,接下來的步驟與初始化時相同。

美國23個州的選舉計票機存在漏洞

安全研究人員發現,美國23個州使用的計票機中存在長達11年未修補的安全漏洞,使得計票機器容易受到黑客攻擊。m650高速選票掃瞄器是由美國領先的選舉裝置 商 election systems software 後文簡稱es s 製造,乙份技術報告指出,該漏洞是投票裝置中最嚴重的漏洞。芝加哥大學 uni...

Kafka Leader的選舉機制

size large color red b kafka的leader是什麼 b color size 首先kafka會將接收到的訊息分割槽 partition b 每個主題 topic 的訊息有不同的分割槽。b 這樣一方面訊息的儲存就不會受到單一伺服器儲存空間大小的限制,另一方面訊息的處理也可以在...

zookeeper的集群選舉

集群選舉型別 全新集群選舉與非全新集群選舉。全新集群選舉 假設現在有5臺伺服器均沒有資料,它們的編號分別是1,2,3,4,5,按編號依次啟動。過程如下 1.伺服器 1 啟動,給自己投票,然後發投票資訊給其他伺服器,由於其他伺服器沒有啟動,所以它收不到反饋資訊,但是由於投票還沒有到達半數 伺服器 1 ...