Zookeerper相關(guān)

1瞧省、Zookeeper定義

Zookeeper是一種分布式協(xié)調(diào)服務。所謂分布式協(xié)調(diào)服務就是在分布式系統(tǒng)中共享配置遵倦、協(xié)調(diào)鎖資源,提供命名服務官撼。

2梧躺、Zookeeper的數(shù)據(jù)結(jié)構(gòu)

Zookeeper的數(shù)據(jù)模型和數(shù)據(jù)結(jié)構(gòu)當中的樹類似,很像文件系統(tǒng)的目錄傲绣。Zookeeper的數(shù)據(jù)存儲也是基于節(jié)點掠哥,這種節(jié)點叫做Znode。Znode的引用方式是路徑引用秃诵,類似于文件路徑:/動物/人

這種層級結(jié)構(gòu)使每個Znode對應唯一路徑续搀。Znode里面包含了數(shù)據(jù)、子節(jié)點引用顷链、訪問權(quán)限等目代。每個節(jié)點的數(shù)據(jù)最大不能超過1MB。
image.png
  • data:Znode存儲的數(shù)據(jù)信息嗤练。
  • ACL:Znode的訪問權(quán)限榛了,即哪些人/IP可以訪問本節(jié)點。
  • stat:包含Znode的各種元數(shù)據(jù)煞抬,如事務ID霜大、版本號、時間戳等革答。
  • child:當前節(jié)點的子節(jié)點引用战坤,類似于二叉樹的左孩子右孩子。
3残拐、Zookeeper的基本操作和事件通知

常見的API:
create 創(chuàng)建節(jié)點
delete 刪除節(jié)點
exists 判斷節(jié)點是否存在
getData 獲取一個節(jié)點的數(shù)據(jù)
getChildren 獲取節(jié)點下的所有節(jié)點
Zookeeper客戶端在請求讀操作的時候途茫,可以選擇是否設置Watch。Watch理解成是注冊在特定Znode上的觸發(fā)器溪食。當這個Znode發(fā)生改變囊卜,即調(diào)用了create、delete错沃、setData方法時栅组,會觸發(fā)Znode上注冊的對應事件,請求Watch的客戶端會接收到異步通知枢析。
具體交互過程:
1玉掸、客戶端調(diào)用getData方法,watch參數(shù)是true醒叁。服務端接到請求司浪,返回節(jié)點數(shù)據(jù)泊业。并且在對應的哈希表里插入被Watch的Znode路徑,以及Watcher數(shù)組断傲。
2脱吱、當被Watch的Znode已刪除,服務端會查找哈希表认罩,根據(jù)key找到該Znode對應的所有Watcher,異步通知客戶端续捂,并且刪除哈希表中對應的Key-Value垦垂。

4、集群角色
  • Leader:負責寫服務
  • Follower:直接為客戶端提供服務牙瓢,參與投票劫拗,同時與Leader進行數(shù)據(jù)交換(同步)
  • Observer:為客戶端提供服務,但不參與投票矾克,同時與Leader進行數(shù)據(jù)交換(同步)
    客戶端的一個事務請求页慷,需要半數(shù)服務器投票通過后才能通知leader commit;leader會發(fā)起一個提案胁附,要求follower投票酒繁。
5、Zookeeper集群

為了防止單機故障控妻,Zookeeper可以維護一個集群州袒。Zookeeper Service集群時一主多從結(jié)構(gòu)。
更新數(shù)據(jù)時弓候,先更新到主節(jié)點(節(jié)點指服務器郎哭,而不是Znode),再同步到從節(jié)點菇存。
讀取數(shù)據(jù)時夸研,直接讀取任意從節(jié)點。

6依鸥、ZAB協(xié)議

為保證主從節(jié)點的數(shù)據(jù)一致性亥至,Zookeeper采用了ZAB協(xié)議,這種協(xié)議非常類似于一致性算法Paxos和Raft毕籽。
ZAB即Zookeeper Atomic Broadcast抬闯,有效解決了Zookeeper集群崩潰恢復以及主從同步數(shù)據(jù)的問題。
Zab協(xié)議既不是強一致性关筒,也不是弱一致性溶握,而是處于兩者之間的單調(diào)一致性。它依靠事務ID和版本號蒸播,保證了數(shù)據(jù)的更新和讀取是有序的睡榆。
ZAB協(xié)議所的三種節(jié)點狀態(tài):
1)Looking:選舉狀態(tài)
2)Following:Follower節(jié)點(從節(jié)點)所處的狀態(tài)
3)Leading:Leader節(jié)點(主節(jié)點)所處狀態(tài)

7萍肆、選舉算法

三種算法:leaderElection/AuthFastLeaderElection/FastLeaderElection

FastLeaderElection算法流程:
image.png
8、ZAB崩潰恢復的三個階段

1)Leader election
3)Discovery
4)Synchronization

9胀屿、Broadcast

Zookeeper常規(guī)情況下更新數(shù)據(jù)的時候塘揣,由Leader廣播到所有Follower。其過程如下:
1)客戶端發(fā)出寫入數(shù)據(jù)請求給任意Follower
2)Follower把寫入數(shù)據(jù)請求轉(zhuǎn)發(fā)給Leader
3)Leader采用二階段提交方式宿崭,先發(fā)送Propose廣播給Follower亲铡。
4)Follower接到Propose消息,寫入日志成功后葡兑,返回ACK消息給Leader
5)Leader接到半數(shù)以上ACK消息奖蔓,返回成功給客戶端,并且廣播Commit請求給Follower讹堤。

10吆鹤、應用場景
  • 分布式鎖
    利用Zookeeper的臨時有序節(jié)點,可以輕松實現(xiàn)分布式鎖洲守。
  • 服務注冊與發(fā)現(xiàn)
    利用Znode和Watcher(Watch的客戶端)可以實現(xiàn)分布式服務的注冊與發(fā)現(xiàn)疑务。dubbo框架就是用它來充當注冊中心的。
  • 共享配置和狀態(tài)信息
    Redis的分布式解決方案Codis梗醇,就利用了Zookeeper來存放數(shù)據(jù)路由表和codis-proxy節(jié)點的元信息知允。同時codis-config發(fā)起的命令都會通過ZooKeeper同步到各個存活的codis-proxy。此外Kafka婴削、HBase廊镜、Hadoop也都依靠Zookeeper同步節(jié)點信息,實現(xiàn)高可用唉俗。

原文鏈接:https://blog.csdn.net/qq_26545305/article/details/87946879

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗤朴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子虫溜,更是在濱河造成了極大的恐慌雹姊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡楞,死亡現(xiàn)場離奇詭異吱雏,居然都是意外死亡,警方通過查閱死者的電腦和手機瘾境,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門歧杏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迷守,你說我怎么就攤上這事犬绒。” “怎么了兑凿?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵凯力,是天一觀的道長茵瘾。 經(jīng)常有香客問我,道長咐鹤,這世上最難降的妖魔是什么拗秘? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮祈惶,結(jié)果婚禮上雕旨,老公的妹妹穿的比我還像新娘。我一直安慰自己捧请,他們只是感情好奸腺,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著血久,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帮非。 梳的紋絲不亂的頭發(fā)上氧吐,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音末盔,去河邊找鬼筑舅。 笑死,一個胖子當著我的面吹牛陨舱,可吹牛的內(nèi)容都是我干的翠拣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼游盲,長吁一口氣:“原來是場噩夢啊……” “哼误墓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起益缎,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谜慌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莺奔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欣范,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年令哟,在試婚紗的時候發(fā)現(xiàn)自己被綠了恼琼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屏富,死狀恐怖晴竞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情役听,我是刑警寧澤颓鲜,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布表窘,位于F島的核電站,受9級特大地震影響甜滨,放射性物質(zhì)發(fā)生泄漏乐严。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一衣摩、第九天 我趴在偏房一處隱蔽的房頂上張望昂验。 院中可真熱鬧,春花似錦艾扮、人聲如沸既琴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甫恩。三九已至,卻和暖如春酌予,著一層夾襖步出監(jiān)牢的瞬間磺箕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工抛虫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留松靡,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓建椰,卻偏偏與公主長得像雕欺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棉姐,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容