1. 程式人生 > 其它 >zookeeper基礎知識

zookeeper基礎知識

zookeeper基礎知識

zk session
每一個客戶端連線到zk的時候都會生成一個session來代表這個客戶端
session有建立和銷燬的過程,session只出現在zk的臨時節點上面

zk的資料和redis一樣全部儲存在記憶體中

zk會在所有節點儲存所有客戶端的session資訊

zk只有主節點可以寫,其他從節點都只能讀
zk叢集是單主的模式,有單點故障問題,但是單主節點可以保證處理順序的一致性
主節點一旦宕機,zk會立即在從節點中投票選出一個新的主節點


3888埠是zk所有節點啟動的時候相互進行通訊來選舉zk leader
zk leader選出來後會監聽2888埠,其他節點會連線leader節點的2888埠
然後通過2888埠進行節點建立,刪除等相關業務操作

zookeeper叢集狀態

zookeeper的連線模型

Paxos分散式一致性演算法

Paxos成立的前提條件
必須保證叢集中所有主機通訊是安全的,只有在一個可信的網路環境中才能成立

ZAB協議

兩階段提交

1.leader把訊息傳送給所有的follwer,所有的follower會在本機先寫相應的日誌檔案
leader會等待超過半數的follower返回寫日誌成功的結果
2.leader接收到超過半數的follower(包含leader本身計算一票)成功訊息後,leader本身會把資料寫入自己的記憶體然後會把資料寫入記憶體的任務傳送給每個follower對應維護的訊息佇列
所有的follower會從自己的佇列裡消費任務,最終實現整個叢集節點資料的一致性
ZAB快速選出leader節點機制

zookeeper的watch機制-分散式協調

1.輪詢心跳機制

2.watch機制

zk最大的優勢是有事件回撥機制

zookeeper實現分散式協調機制

zookeeper實現分散式鎖

zk實現分散式鎖的優勢 zk叢集是高可用的
redis是有單點故障 而且不能開啟資料持久化,開啟持久化就涉及磁碟IO影響效能

鎖的功能是在單機多執行緒或者分散式多主機多執行緒的情況下限制同一時刻只能有一個客戶端使用被鎖的資源
單執行緒的情況下是無需設定鎖的


第一步:爭搶鎖 只有一個客戶端能獲得鎖
第二步:處理死鎖 獲得鎖的客戶端在沒有釋放鎖之前就宕機
第三步:客戶端正常釋放鎖
第四步: 鎖被釋放或者被刪除後,如何通知其它客戶端


分散式鎖實現機制
1.每個獨立執行緒併發連線zk叢集
2.執行緒連線zk後呼叫zk的API建立一個序列臨時節點,建立完成之後所有執行緒進入等待狀態
3.註冊建立zk臨時節點回調函式,獲取當前zk目錄下的所有子節點
4.比較子節點列表編號,把編號最小的執行緒從等待狀態切換成執行狀態
5.每個zk臨時節點watch它前面編號的zk節點