是什么
- 是一個分布式的,開放源碼的分布式應用程序協(xié)調(diào)服務(wù)雹顺。
- 是集群的管理者句葵,監(jiān)視著集群中各個節(jié)點的狀態(tài)厕鹃。根據(jù)節(jié)點提交的反饋進行下一步合理的操作。
- 最終笼呆,將簡單易用的接口和性能高效熊响,功能穩(wěn)定的系統(tǒng)提供給用戶
提供了什么
- 文件系統(tǒng)
- 通知機制
文件系統(tǒng)
[圖片上傳失敗...(image-48c60a-1534841583787)]
- 每個子目錄項如 App1都被成為znode
- 和文件系統(tǒng)一樣,能夠自由的增加 刪除znode
- znode可以存儲數(shù)據(jù)
有四種類型的znode
- 持久化目錄節(jié)點 PERSISTENT
- 客戶端與zookeeper斷開連接后诗赌,該節(jié)點依然存在
- 持久化順序目錄節(jié)點 PERSISTENT_SEQUENTIAL
- 斷開后汗茄,該節(jié)點依然存在,只是zookeeper給該節(jié)點名稱進行順序編號
- 臨時目錄節(jié)點 ephemeral
- 斷開連接后铭若,節(jié)點被刪除
- 臨時順序編號目錄節(jié)點
- 斷開后洪碳,節(jié)點刪除。c創(chuàng)建的節(jié)點會自動按順序編號
通知機制
客戶端注冊監(jiān)聽它關(guān)心的目錄節(jié)點叼屠,當目錄節(jié)點發(fā)生變化時瞳腌,zookeeper會通知客戶端。
Watch
- 一個watch事件是一個一次性的觸發(fā)器镜雨。
- watcher event異步發(fā)送嫂侍。可能會存在,由于網(wǎng)絡(luò)延遲或其他因素導致挑宠,客戶端在不同的情況下收到監(jiān)聽事件菲盾。
能做什么
- 命名服務(wù)
- 配置管理
- 集群管理
- 分布式鎖
- 隊列管理
命名服務(wù)
在zookeeper文件系統(tǒng)里創(chuàng)建一個目錄,即有統(tǒng)一的path
配置管理
如果程序分布在多臺機器上各淀,逐個配置很麻煩懒鉴。全部放到zookeeper上,然后監(jiān)聽某個目錄節(jié)點碎浇,一旦配置信息發(fā)生變化临谱,每個程序都會收到通知。
[圖片上傳失敗...(image-e8ba89-1534841583787)]
集群管理
主要是兩點
機器的加入和退出
選舉master
[圖片上傳失敗...(image-4a87ab-1534841583787)]所有機器約定在group下創(chuàng)建臨時目錄節(jié)點奴璃,然后監(jiān)聽
當有機器掛掉悉默,該機器與zookeeper斷開,該節(jié)點被刪除苟穆,其他機器都可以接到通知
當有機器加入麦牺,也會收到通知。默認選取編號最小的機器作為master
分布式鎖
分為兩類
- 將znode看做一把鎖鞭缭,通過createznode方式實現(xiàn)剖膳,所有客戶端都去創(chuàng)建/pre_lock節(jié)點,誰成功創(chuàng)建岭辣,誰獲得鎖.
- /pre_lock預先存在吱晒,所有客戶端在它下面創(chuàng)建臨時順序目錄節(jié)點,編號最小的獲得鎖沦童。
工作原理
zookeeper的核心是原子廣播仑濒,這個機制保證了各個server之間的同步。實現(xiàn)這個機制的協(xié)議叫zab協(xié)議(ZooKeeper Atomic Broadcast )
zab協(xié)議有兩種模式:
- 恢復模式(選主)
- 廣播模式 (同步)
恢復模式
- 當服務(wù)啟動或者領(lǐng)導者崩潰后偷遗,zab進入恢復模式
- 當領(lǐng)導被選舉出來墩瞳,且大多數(shù)server完成了同步,恢復模式結(jié)束
為了保證事物順序一致性:
zookeeper采用了遞增的事物id號 64位
選主流程
zk的選舉有兩種 一種是基于basic paxos實現(xiàn)的氏豌,另外一種是fast paxos實現(xiàn)的,默認是fast
fast paxos
某server首先向所有的server提議自己要成為leader喉酌,其他server收到之后,解決apoch和zxid的沖突泵喘,并接受對方建議泪电,然后向?qū)Ψ桨l(fā)送完成的信息。
同步流程
選完leader之后纪铺,zk就進入同步流程
- leader等待server連接
- Follow連接leader相速,將最大的zxid發(fā)送給leader
- leader根據(jù)zxid確定同步點
- 完成同步之后通知follower,已經(jīng)成為uptodate狀態(tài)
- follower收到uptodate消息后鲜锚,又可以重新接收client的請求進行服務(wù)了突诬。