Zookeeper

參考文章

是什么

  • 是一個(gè)分布式的,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù)。
  • 是集群的管理者,監(jiān)視著集群中各個(gè)節(jié)點(diǎn)的狀態(tài)。根據(jù)節(jié)點(diǎn)提交的反饋進(jìn)行下一步合理的操作。
  • 最終,將簡(jiǎn)單易用的接口和性能高效,功能穩(wěn)定的系統(tǒng)提供給用戶

提供了什么

  • 文件系統(tǒng)
  • 通知機(jī)制

文件系統(tǒng)

[圖片上傳失敗...(image-48c60a-1534841583787)]

  • 每個(gè)子目錄項(xiàng)如 App1都被成為znode
  • 和文件系統(tǒng)一樣,能夠自由的增加 刪除znode
  • znode可以存儲(chǔ)數(shù)據(jù)

有四種類(lèi)型的znode

  • 持久化目錄節(jié)點(diǎn) PERSISTENT
    • 客戶端與zookeeper斷開(kāi)連接后,該節(jié)點(diǎn)依然存在
  • 持久化順序目錄節(jié)點(diǎn) PERSISTENT_SEQUENTIAL
    • 斷開(kāi)后,該節(jié)點(diǎn)依然存在,只是zookeeper給該節(jié)點(diǎn)名稱進(jìn)行順序編號(hào)
  • 臨時(shí)目錄節(jié)點(diǎn) ephemeral
    • 斷開(kāi)連接后,節(jié)點(diǎn)被刪除
  • 臨時(shí)順序編號(hào)目錄節(jié)點(diǎn)
    • 斷開(kāi)后,節(jié)點(diǎn)刪除。c創(chuàng)建的節(jié)點(diǎn)會(huì)自動(dòng)按順序編號(hào)

通知機(jī)制

客戶端注冊(cè)監(jiān)聽(tīng)它關(guān)心的目錄節(jié)點(diǎn),當(dāng)目錄節(jié)點(diǎn)發(fā)生變化時(shí),zookeeper會(huì)通知客戶端。

Watch

  • 一個(gè)watch事件是一個(gè)一次性的觸發(fā)器。
  • watcher event異步發(fā)送。可能會(huì)存在,由于網(wǎng)絡(luò)延遲或其他因素導(dǎo)致,客戶端在不同的情況下收到監(jiān)聽(tīng)事件。

能做什么

  • 命名服務(wù)
  • 配置管理
  • 集群管理
  • 分布式鎖
  • 隊(duì)列管理

命名服務(wù)

在zookeeper文件系統(tǒng)里創(chuàng)建一個(gè)目錄,即有統(tǒng)一的path

配置管理

如果程序分布在多臺(tái)機(jī)器上,逐個(gè)配置很麻煩。全部放到zookeeper上,然后監(jiān)聽(tīng)某個(gè)目錄節(jié)點(diǎn),一旦配置信息發(fā)生變化,每個(gè)程序都會(huì)收到通知。
[圖片上傳失敗...(image-e8ba89-1534841583787)]

集群管理

主要是兩點(diǎn)

  • 機(jī)器的加入和退出

  • 選舉master
    [圖片上傳失敗...(image-4a87ab-1534841583787)]

  • 所有機(jī)器約定在group下創(chuàng)建臨時(shí)目錄節(jié)點(diǎn),然后監(jiān)聽(tīng)

  • 當(dāng)有機(jī)器掛掉,該機(jī)器與zookeeper斷開(kāi),該節(jié)點(diǎn)被刪除,其他機(jī)器都可以接到通知

  • 當(dāng)有機(jī)器加入,也會(huì)收到通知。默認(rèn)選取編號(hào)最小的機(jī)器作為master

分布式鎖

分為兩類(lèi)

  1. 將znode看做一把鎖,通過(guò)createznode方式實(shí)現(xiàn),所有客戶端都去創(chuàng)建/pre_lock節(jié)點(diǎn),誰(shuí)成功創(chuàng)建,誰(shuí)獲得鎖.
  2. /pre_lock預(yù)先存在,所有客戶端在它下面創(chuàng)建臨時(shí)順序目錄節(jié)點(diǎn),編號(hào)最小的獲得鎖。

工作原理

zookeeper的核心是原子廣播,這個(gè)機(jī)制保證了各個(gè)server之間的同步。實(shí)現(xiàn)這個(gè)機(jī)制的協(xié)議叫zab協(xié)議(ZooKeeper Atomic Broadcast )

zab協(xié)議有兩種模式:

  • 恢復(fù)模式(選主)
  • 廣播模式 (同步)

恢復(fù)模式

  • 當(dāng)服務(wù)啟動(dòng)或者領(lǐng)導(dǎo)者崩潰后,zab進(jìn)入恢復(fù)模式
  • 當(dāng)領(lǐng)導(dǎo)被選舉出來(lái),且大多數(shù)server完成了同步,恢復(fù)模式結(jié)束

為了保證事物順序一致性:

zookeeper采用了遞增的事物id號(hào) 64位

選主流程

zk的選舉有兩種 一種是基于basic paxos實(shí)現(xiàn)的,另外一種是fast paxos實(shí)現(xiàn)的,默認(rèn)是fast

fast paxos

某server首先向所有的server提議自己要成為leader,其他server收到之后,解決apoch和zxid的沖突,并接受對(duì)方建議,然后向?qū)Ψ桨l(fā)送完成的信息。


image

同步流程

選完leader之后,zk就進(jìn)入同步流程

  1. leader等待server連接
  2. Follow連接leader,將最大的zxid發(fā)送給leader
  3. leader根據(jù)zxid確定同步點(diǎn)
  4. 完成同步之后通知follower,已經(jīng)成為uptodate狀態(tài)
  5. follower收到uptodate消息后,又可以重新接收client的請(qǐng)求進(jìn)行服務(wù)了。
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容