Zookeeper 集群中是怎樣選舉leader的

zookeeper集群中服務器被劃分為以下四種狀態:

  • LOOKING:尋找Leader狀態。處于該狀態的服務器會認為集群中沒有Leader,需要進行Leader選舉;
  • FOLLOWING:跟隨著狀態,說明當前服務器角色為Follower;
  • LEADING:領導者狀態,表明當前服務器角色為Leader;
  • OBSERVING:觀察者狀態,表明當前服務器角色為Observer。

Leader選舉的觸發時機

  • 集群啟動,這個時候需要選舉出新的Leader;
  • Leader服務器宕機;

第一次啟動Leader選舉

假設想在的有三臺機器搭建集群:
在這里插入圖片描述

  1. 每個Server發出一個投票投給自己。當server1啟動的時候,為Looking狀態,對應的myid記為1,ZXID為0,他先投自己一票,此時他的投票為(1,0);然后需要把自己的選票發給集群中的其他機器。
  2. server2這個時候也啟動了,也是Looking狀態,也先投自己一票,也就是(2,0),然后需要把自己的選票發給集群中的其他機器。
  3. 接受來自各個服務器的投票。集群的每個服務器收到投票后,首先判斷該投票是否有效,如檢查是否是本輪投票、是否來自LOOKING狀態的服務器;
  4. 處理投票。針對每一個投票,服務器都需要將別人的投票和自己的投票進行PK,PK的規則如下:
  5. 優先檢查ZXID。ZXID比較大的服務器優先作為Leader;
  6. 如果ZXID相同,那么就比較myid。myid較大的服務器作為Leader服務器。

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

  1. 統計投票。每次投票后,服務器都會統計投票信息,判斷是否已經過半機器接收到相同的投票信息,對于Server1、Server2而言,都統計出集群中已經有兩臺機器接受了(2, 0)的投票信息,此時便認為已經選出了Leader。
  2. 改變服務器狀態。一旦確定了Leader,每個服務器都會更新自己的狀態,如果是Follower,那么就變更為FOLLOWING,如果是Leader,就變更為LEADING。
  3. 這個時候Server3啟動了, 發現集群中已經有了Leader,就建立連接并把自己的狀態置為Following。

非第一次啟動Leader選舉

在這里插入圖片描述

在zookeeper運行期間,即便有新服務器加入,也不會影響到Leader,新加入的服務器會將原有的Leader服務器視為Leader,進行同步。但是一旦Leader宕機了,那么整個集群就將暫停對外服務,進行新一輪Leader的選舉,其過程和啟動時期的Leader選舉過程基本一致。假設正在運行的有Server1、Server2、Server3三臺服務器,當前Leader是Server2,若某一時刻Leader掛了,此時便開始Leader選舉。這里我們假設server3為原本的Leader,其余四臺均為Follower,某一時刻server3和server5都宕機了,那么選舉過程如下:

  1. 變更狀態。Leader宕機后,余下的非Observer服務器都會將自己的服務器狀態變更為LOOKING,然后開始進行Leader選舉流程;
  2. 每個Server會發出一個投票。在這個過程中,需要生成投票信息(Epoch,ZXID,myid),對應的server1,server2,server4的選票信息如上圖,;其中Leader選舉的規則是
  3. EPOCH大的直接勝出
  4. EPOCH相同,事務大的勝出
  5. 事務ID相同,服務器ID大的勝出

之后各個Looking狀態的服務器會交換信息,最終會多數選舉server4,也就更改為(1,120,4)的選票信息。

  1. 接收來自各個服務器的投票。與啟動時過程相同;
  2. 處理投票;
  3. 統計投票;
  4. 改變服務器的狀態,此時server4成為新的Leader。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166625.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166625.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166625.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jmeter基礎和概念

JMeter 介紹: 一個非常優秀的開源的性能測試工具。 優點:你用著用著就會發現它的重多優點,當然不足點也會呈現出來。 從性能工具的原理劃分: Jmeter工具和其他性能工具在原理上完全一致,工具包含4個部分: …

綠色能源守護者:光伏運維無人機

隨著我國太陽能光伏產業被納入戰略性新興產業,光伏發電成為實現“雙碳”目標的關鍵之一。在政策支持下,光伏產業維持高速發展,為迎接“碳達峰、碳中和”大勢注入了強大動力。在這一背景下,復亞智能與安徽一家光伏企業合作&#xf…

LeetCode78. Subsets

文章目錄 一、題目二、題解 一、題目 Given an integer array nums of unique elements, return all possible subsets (the power set). The solution set must not contain duplicate subsets. Return the solution in any order. Example 1: Input: nums [1,2,3] Outpu…

size和shape的區別與聯系

對于Numpy數據類型 shape和size都是屬于Numpy的屬性 arr.shape 將返回一個包含兩個元素的元組,例如 (m, n),其中 m 表示數組的行數,n 表示數組的列數。arr.size 將返回數組中元素的總數。 舉例: 輸入: import numpy as np# 創…

JavaScript之DOM操作

第一章 API介紹 ?API是一種事先定義好的函數,用來提供應用程序與開發人員基于某軟件或硬件得以訪問的一組例程,而又無需訪問源碼,或理解內部工作機制的細節。 ?Web API接口:瀏覽器提供的一系列操作瀏覽器功能和頁面元素的API(BO…

【Linux】Linux的常用基本指令

Linux常用基本指令 Linux指令的歷史背景前言說明一、 ls 列出文件中的所有內容常用選項 二、pwd 顯示當前所在目錄進程三、cd 將當前工作目錄改變到指定的目錄下常用樣例 四、touch 1. 更改文檔或目錄的日期時間 2. 新建一個不存在的文件常用選項 四、mkdir 1. 更改文檔或目錄的…

牛客劍指offer刷題回溯篇

文章目錄 矩陣中的路徑題目思路代碼實現 機器人的運動范圍題目思路代碼實現 矩陣中的路徑 題目 請設計一個函數,用來判斷在一個n乘m的矩陣中是否存在一條包含某長度為len的字符串所有字符的路徑。路徑可以從矩陣中的任意一個格子開始,每一步可以在矩陣…

TensorFlow實戰教程(二十五)-基于BiLSTM-CRF的醫學命名實體識別研究(下)模型構建

這篇文章寫得很冗余,但是我相信你如果真的看完,并且按照我的代碼和邏輯進行分析,對您以后的數據預處理和命名實體識別都有幫助,只有真正對這些復雜的文本進行NLP處理后,您才能適應更多的真實環境,堅持!畢竟我寫的時候也看了20多小時的視頻,又寫了20多個小時,別抱怨,加…

JS按順序逐個發送 請求

1.使用Promise鏈 當需要按順序逐個發送 POST 請求時,可以使用 Axios 庫的 Promise 鏈來實現。在每個 POST 請求成功后,可以觸發下一個請求。這里有一個簡單的示例: 首先,確保已經在 HTML 文件中引入了 Axios 庫: &l…

控制反轉(IoC)是什么?

文章目錄 控制反轉(Inversion of Control,IoC)傳統的程序設計中:應用程序控制程序流程控制反轉設計中:由框架或容器控制程序流程IoC 的作用 舉例生活例子軟件工程例子 控制反轉(Inversion of Control&#…

組合不重復的3位數

編程要求 給出四個不同的數字,能夠組成多少個不重復的3位數,按照從小到大的順序輸出,每行一個。 測試用例 測試輸入 1 2 3 4 測試輸出 123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 …

算法:給出指定整數區間、期望值,得到最終結果

1,問題: 在游戲中,我們經常會遇到以下情況:打開寶箱,獲得x個卡牌碎片。 但通常策劃只會給一個既定的數值空間,和一個期望得到的值,然后讓我們去隨機。比如: 問題A:在1~…

問卷調查平臺選擇指南:哪個好用與如何選擇的實用指南

問卷調查由于其成本低、數據可量化的特點,常被用于工作和學習中。網絡的發展使得問卷調查的形式也越累越多樣化,不少人在做問卷調查的時候可能都會提出這樣一個問題——問卷調查平臺哪個好用?怎么選擇? 選擇問卷調查平臺&#xf…

ubuntu22.04 arrch64版在線安裝redis

腳本 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32 echo "deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse" >…

可以ping通IP但是無法遠程連接-‘telnet‘ 不是內部或外部命令,也不是可運行的程序或批處理文件

起因 一開始遠程連接IP,報錯,懷疑是自己網絡原因,但是同事依舊無法連接 懷疑是自己防火墻的原因,查看關閉依舊無法連接 問題 兩個地址可以ping通排除防火墻緣故 懷疑端口,測試端口 然 解決方案 winR 輸入control…

常見立體幾何圖形的體積

文章目錄 abstract祖暅原理推論 棱錐和圓錐的體積用積分的方法推導棱臺和圓臺的體積圓臺體積公式 球體的體積球體的表面積 abstract 錐體和球體的體積公式主要通過積分的方法推導 這類公式的推導中學一般不要求,只要會應用公式在高等數學中由合適和方便的工具來推導這些公式而…

App Inventor 2 數字轉文本

App Inventor 2 是弱語言類型,文本和數字之間不用刻意去轉換,之間賦值就可以了。 案例:數字轉文本 App Inventor 2 是弱語言類型,同理數字也能直接賦值給文本變量: 更多請參考:App Inventor 2 文本代碼塊…

【c語言】二維數組的對角線對稱交換

c語言&#xff0c;假設已經有了一個二維數組&#xff0c;對其進行對角線對稱變換&#xff0c;如&#xff08;0&#xff0c;1&#xff09;與&#xff08;1&#xff0c;0&#xff09;變換&#xff0c;并打印。 示例 #include <stdio.h>void swap(int *a, int *b) {int te…

opencv-背景減除

背景減除&#xff08;Background Subtraction&#xff09;是一種用于從視頻序列中提取前景對象的計算機視覺技術。該技術的主要思想是通過建模和維護場景的背景&#xff0c;從而檢測出在不同時間點出現的前景對象。 OpenCV 提供了一些用于背景減除的函數&#xff0c;其中最常用…

完善農業農村基礎數據資源體系,加速鄉村振興

完善農業農村基礎數據資源體系&#xff0c;加速鄉村振興 隨著鄉村振興戰略的實施&#xff0c;農業農村基礎設施建設也得到了越來越多的關注。然而&#xff0c;在實施這一戰略的過程中&#xff0c;我們也必須認識到&#xff0c;完善農業農村基礎數據資源體系同樣是十分重要的。 …