Zookeeper集群角色分配原理

ZK內部存在Leader和Follower兩個角色,那么這兩種角色是怎樣劃分呢?或者說是怎么樣被選舉出來呢?以下將詳細介紹ZK內部的選舉機制。
ZK是通過內部的選舉算法來選出Leader。(服務器需要配置對應的ID和文件)如下圖所示:
這里寫圖片描述

第一種情況:集群是全新的集群。

以一個簡單的例子來說明整個選舉的過程.
假設有五臺服務器組成的zookeeper集群,它們的id從1-5,同時它們都是最新啟動的,也就是沒有歷史數據,在存放數據量這一點上,都是一樣的.假設這些服務器依序啟動,來看看會發生什么:
1) 服務器1啟動,此時只有它一臺服務器啟動了,它發出去的報沒有任何響應,所以它的選舉狀態一直是LOOKING狀態
2) 服務器2啟動,它與最開始啟動的服務器1進行通信,互相交換自己的選舉結果,由于兩者都沒有歷史數據,所以id值較大的服務器2勝出,但是由于沒有達到超過半數以上的服務器都同意選舉它(這個例子中的半數以上是3),所以服務器1,2還是繼續保持LOOKING狀態.
3) 服務器3啟動,根據前面的理論分析,服務器3成為服務器1,2,3中的老大,而與上面不同的是,此時有三臺服務器選舉了它,所以它成為了這次選舉的leader.
4) 服務器4啟動,根據前面的分析,理論上服務器4應該是服務器1,2,3,4中最大的,但是由于前面已經有半數以上的服務器選舉了服務器3,所以它只能接收當小弟的命了.
5) 服務器5啟動,同4一樣,當小弟.

第二種情況:非全新集群的選舉機制(數據恢復)

那么,初始化的時候,是按照上述的說明進行選舉的,但是當zookeeper運行了一段時間之后,有機器down掉,重新選舉時,選舉過程就相對復雜了。
需要加入數據id、leader id和邏輯時鐘。
數據id:數據新的id就大,數據每次更新都會更新id。
Leader id:就是我們配置的myid中的值,每個機器一個。
邏輯時鐘:這個值從0開始遞增,每次選舉對應一個值,也就是說: 如果在同一次選舉中,那么這個值應該是一致的 ; 邏輯時鐘值越大,說明這一次選舉leader的進程更新.
選舉的標準就變成:
1、邏輯時鐘小的選舉結果被忽略,重新投票
2、統一邏輯時鐘后,數據id大的勝出
3、數據id相同的情況下,leader id大的勝出
根據這個規則選出leader。

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

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

相關文章

2016大數據發展7大趨勢

1.算法(Algorithms)的崛起 大數據已過時,算法正當道。數據已經成為一種商品,每個組織都能夠收集和存儲大量的數據。分析大數據也不再那么引人注目了。每個組織都可以聘用或培訓大數據分析人員來了解數據模式。 2016年,…

請編寫一個方法,實現整數的乘法、減法和除法運算(這里的除指整除)。只允許使用加號。

方法思路 乘法:a*b就等于b個a相加。題目也說了不考慮性能。 減法:a-b就等于a(-1)*b;就等于a加上b的相反數,得到b的相反數就解決了。 除法:a/bn;就是說有n個b相加小于等于a;可以采用b一直加,直到大于a結束。…

MySQL數據庫重點概要總結

目錄前言:1、結構化查詢語言(Structured Query Language)簡稱SQL。2、基本SELECT語句語法3、多表鏈接4、笛卡爾積5、ANSI SQL ANSI SQL:1999標準的連接語法6、單行函數和分組函數的區別:7、分組函數8、SQL語句的執行順序:9、子查詢…

《MySQL排錯指南》——1.9 許可問題

本節書摘來自異步社區出版社《MySQL排錯指南》一書中的第1章,第1.9節,作者:【美】Sveta Smirnova(斯維特 斯米爾諾娃),更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.9 許可問題 MySQL有復雜的…

畢業半年,碼過5個城市

時間飛逝,半年前我還在想我的畢業設計要怎么做,還在擔心自己的答辯能夠拿多少分,而此刻我正在成都寫我喜歡的代碼,過著我想過的生活。畢業半年,碼過5個城市,從廈門->太原-》合肥-》北京-》成都。2016是我…

python ---單例(Singleton)

單例(Singleton) 單例是一種 設計模式 ,應用該模式的類只會生成一個實例。 單例模式保證了在程序的不同位置都 可以且僅可以取到同一個對象實例 :如果實例不存在,會創建一個實例;如果已存在就會返回這個實例…

Oracle-11g-R2 RAC 環境下 GPnP Profile 文件

GPnP Profile 文件的作用&#xff1a; GPnP Profile 文件是一個保存于$GRID_HOME/gpnp/<hostname>/profiles/peer目錄下的小型 XML 文件&#xff0c;名稱為 profile.xml。其用于正確描述 RAC 每個節點的全局特性。每個節點上都會保存一個本地的 GPnP Profile&#xff0c;…

《Pro/ENGINEER野火版5.0從入門到精通》——2.5 設置零件單位

本節書摘來自異步社區《Pro/ENGINEER野火版5.0從入門到精通》一書中的第2章&#xff0c;第2.5節&#xff0c;作者 暴風創新科技&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.5 設置零件單位 由于不同國家單位制的不相同&#xff0c;在企業間合作或溝通…

元類被稱為 Python 中的“深奧的巫術“

元類被稱為 Python 中的“深奧的巫術”。盡管你需要用到它的地方極少&#xff08;除非你基于 zope 編程&#xff09;&#xff0c;可事實上它的基礎理論其實令人驚訝地易懂。 一切皆對象 一切都有類型 “class”和“type”之間本質上并無不同 類也是對象 它們的類型是 type 以…

機器學習之必知開源數據集

之前看到的不錯的文章&#xff0c;玩機器學習數據是關鍵&#xff0c;有了這些東西&#xff0c;你就不必再為沒有數據而苦惱。 轉自&#xff1a;https://www.toutiao.com/i6432197108580745730/ 目錄UCIGoogleTrendsKaggleAWS公用數據集ImagenetMINIST/r/數據集其他數據集 目錄…

PHP中header函數的用法及其注意重點是什么呢

1、使用header函數進行跳轉頁面&#xff1b; header(Location:.$url);  其中$url就是將要跳轉的url了。 這種用法的注意事項有以下幾點&#xff1a; ?Location和":"之間不能有空格&#xff0c;否則會出現錯誤&#xff08;注釋&#xff1a;我剛測試了&#xff0c;在…

《計算機科學概論》—第3章3.3節文本表示法

本節書摘來自華章出版社《計算機科學概論》一書中的第3章&#xff0c;第3.3節文本表示法&#xff0c;作者&#xff3b;美]內爾黛爾&#xff08;Nell Dale&#xff09;約翰路易斯&#xff08;John Lewis&#xff09;&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾…

習題

# -*- coding: utf-8 -*- # Time : 2019/08/08 17:38 # Author : Liu # File : zuoye.py# 一、 # 將此功能定義成一個函數&#xff0c; # 電腦隨機生成1~100隨機數&#xff0c;用戶輸入一個數字&#xff0c;電腦提示用戶大或者小&#xff0c;猜錯&#xff0c;繼續提示&a…

經典技術面試指南

目錄計算機基礎知識數據結構算法操作系統計算機網絡數據庫海量數據處理C語言基礎Java基礎Java高級Java Web設計模式知識的綜合能力工具使用項目相關技術熱情表達能力思考方式其他推薦閱讀 目錄 最近看到一份不錯的面試總結&#xff0c;也是每位程序猿都應該掌握的基礎&#x…

Linux 共享內存詳解一

共享內存段被多個進程附加的時候&#xff0c;如果不是所有進程都已經調用shmdt&#xff0c;那么刪除該共享內存段時&#xff0c;會出現一個臨時的不完整的共享內存段&#xff08;key值是0&#xff09;&#xff0c;無法徹底刪除。只有當所有進程都調用shmdt&#xff0c;這個臨時…

python 魔術方法

python 魔術方法 常用魔術方法 魔術方法就是一個類的特殊方法&#xff0c;和普通方法唯一的不同時&#xff0c;普通方法需要調用&#xff01;而魔術方法由系統自動調用。 1.__init__ 初始化魔術方法 觸發時機&#xff1a;初始化對象時觸發&#xff08;不是實例化觸發&#xf…

Storm ack和fail機制再論

之前對這個的理解有些問題&#xff0c;今天用到有仔細梳理了一遍&#xff0c;記錄一下 首先開啟storm tracker機制的前提是&#xff0c; 1. 在spout emit tuple的時候&#xff0c;要加上第3個參數messageid 2. 在配置中acker數目至少為1 3. 在bolt emit的時候&#xff0c;要加…

Storm編程模型總結

目錄前言&#xff1a;1、Storm編程模型2、對應的的WordCount案例總結&#xff1a; 目錄 前言&#xff1a; 對于Storm的編程模型有必要做一個詳細的介紹&#xff08;配合WC案例來介紹&#xff09; 1、Storm編程模型 上圖中組件的解釋&#xff1a; DataSource&#xff1a;外…

13_觀察者模式

【觀察者模式】 也叫作發布/訂閱模式&#xff0c;使用較為頻繁。 定義了對象間一種一對多的依賴關系&#xff0c;當一個對象改變狀態時&#xff0c;則所有依賴于它的對象都會得到通知并被自動更新。 觀察者模式由以下幾個角色組成&#xff1a; * Subject 被觀察者 定義被觀察者…

【python】內建異常類的層次

內建異常類的層次 BaseException-- SystemExit-- KeyboardInterrupt-- GeneratorExit-- Exception-- StopIteration-- StopAsyncIteration-- ArithmeticError| -- FloatingPointError| -- OverflowError| -- ZeroDivisionError-- AssertionError-- AttributeError-- …