Zookeeper自探(三)—Zookeeper內部原理

Zookeeper自探

自己的話:每天都要保持前進,我勢必要有強勁的實力再跟全新的自己問好。
多認識更加優秀的人,你會討厭現在的自己。

Zookeeper內部原理


一、節點類型

在這裏插入圖片描述


二、Stat結構體

1)czxid-創建節點的事務 zxid
每次修改 ZooKeeper 狀態都會收到一個 zxid 形式的時間戳,也就是 ZooKeeper 事務 ID。

事務 ID 是 ZooKeeper 中所有修改總的次序。每個修改都有唯一的 zxid,如果 zxid1 小於 zxid2,那麼 zxid1 在 zxid2 之前發生。
2)ctime - znode 被創建的毫秒數(從 1970 年開始)
3)mzxid - znode 最後更新的事務 zxid
4)mtime - znode 最後修改的毫秒數(從 1970 年開始)
5)pZxid-znode 最後更新的子節點 zxid
6)cversion - znode 子節點變化號,znode 子節點修改次數
7)dataversion - znode 數據變化號
8)aclVersion - znode 訪問控制列表的變化號
9)ephemeralOwner- 如果是臨時節點,這個是 znode 擁有者的 session id。如果不是臨時節點則是 0。
10)dataLength- znode 的數據長度
11)numChildren - znode 子節點數量


三、寫數據流程

在這裏插入圖片描述


四、選舉機制*(面試重點)

1. 半數機制:集羣中半數以上機器存活,集羣可用。所以 Zookeeper 適合安裝奇數臺
服務器。

2. Zookeeper 雖然在配置文件中並沒有指定 Master 和 Slave。但是,Zookeeper 工作時,
是有一個節點爲 Leader,其他則爲 Follower,Leader 是通過內部的選舉機制臨時產生的。
3. 以一個簡單的例子來說明整個選舉的過程。
假設有五臺服務器組成的 Zookeeper 集羣,它們的 id 從 1-5,同時它們都是最新啓動的,也就是沒有歷史數據,在存放數據量這一點上,都是一樣的。假設這些服務器依序啓動,來看看會發生什麼,如圖:
在這裏插入圖片描述
(1)服務器 1 啓動,發起一次選舉。服務器 1 投自己一票。此時服務器 1 票數一票,不夠半數以上(3 票),選舉無法完成,服務器 1 狀態保持爲 LOOKING;
(2)服務器 2 啓動,再發起一次選舉。服務器 1 和 2 分別投自己一票並交換選票信息:此時服務器 1 發現服務器 2 的 ID 比自己目前投票推舉的(服務器 1)大,更改選票爲推舉服務器 2。此時服務器 1 票數 0 票,服務器 2 票數 2 票,沒有半數以上結果,選舉無法完成,服務器 1,2 狀態保持 LOOKING
(3)服務器 3 啓動,發起一次選舉。此時服務器 1 和 2 都會更改選票爲服務器 3。此次投票結果:服務器 1 爲 0 票,服務器 2 爲 0 票,服務器 3 爲 3 票。此時服務器 3 的票數已經超過半數,服務器 3 當選 Leader。服務器 1,2 更改狀態爲 FOLLOWING,服務器 3 更改狀態爲LEADING;
(4)服務器 4 啓動,發起一次選舉。此時服務器 1,2,3 已經不是 LOOKING 狀態,
不會更改選票信息。交換選票信息結果:服務器 3 爲 3 票,服務器 4 爲 1 票。此時服務器 4
服從多數,更改選票信息爲服務器 3,並更改狀態爲 FOLLOWING;
(5)服務器 5 啓動,同 4 一樣當小弟。


五、監聽器原理*(面試重點)

在這裏插入圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章