五、zookeeper集羣的選舉機制,監聽原理,寫數據流程 和 節點類型,

zk集羣的選舉機制:

半數機制:zk集羣中的有半數以上的節點存活,zk就能正常運行,所以zk集羣節點最好是奇數個。Zk集羣中只有一個leader,其他都是follower

選舉機制:會經過投票,票數大於半數以上的第一臺服務器,當選leader

Server1  server2  server3  server4  server5
(id大的不給id小的投票,id小的會給id大的投票,server1-5,id依次增大)
5臺機器:server1開始投票,server1投自己,因爲server1 id最小,所以server1只有一票
Server2:server2會投自己,server1也會投server2一票,server2 兩票
Server3:server3會投自己,server1和server2各自投server3一票,那麼server3就三票,三票在半數以上(一共五臺機器),所以就選server3當leader,
後邊的server4(4票)和server5(5票)雖然來都比server3票數多,但是server3是第一個票數大於半數以上的,所以就選擇server3當leader

Zokeeper的監聽的原理:(重點)

1)首先要有一個main()線程
2)在main()線程中創建zookeeper的客戶端,這時就會創建兩個線程,一個負責網絡連接通信(connect),一個負責監聽(listen)
3)通過客戶端創建的connect線程將註冊的監聽事件發送給zookeeper
4)在zookeeper server端的註冊監聽器列表中將註冊的監聽事件添加到列表中
5)Zookeeper監聽到數據或路徑發生變化,就會將這個消息發送給listen線程
6)Listen線程調用內部的process()方法,就是發生了數據變化之後怎麼辦,這是程序員自己開發的。

如圖:

五、zookeeper集羣的選舉機制,監聽原理,寫數據流程 和 節點類型,

zk集羣寫數據的流程

我們client想server發送寫請求的時候,是如何進行寫操作的,各個server的數據時如何保持一致的
五、zookeeper集羣的選舉機制,監聽原理,寫數據流程 和 節點類型,
理解: 是client給server發送寫請求的時候,會把這個請求轉發給leader,(寫請求follower做不了主,但是讀請求可以做主),leader會把這個寫請求發送給各個server並進行寫數據的操作,當各個server數據寫完之後,會依次告知leader,當leader收到半數以上的server是寫成功的話,leader就會認爲這個寫操作成功了,然後leader 在告知各個server,這條寫操作成功了,然後就在將成功的消息發送給客戶端,進行顯示,這樣就會保持每個server都有副本,數據從而達到一致

Zk集羣中znode的節點的類型

持久型(Persistent):客戶端和服務器斷開連接後,創建的鏈接不刪除
短暫型(Epheneral):客戶端個服務器斷開理解後,創建的節點自己刪除

持久節點包括
(1)持久化目錄節點:客戶端不zk斷開鏈接後,節點依舊存在
(2)持久化順序編號目錄節點:客戶端與zk斷開鏈接後,節點依舊存在 只是zk給該節點名稱進行順序編號。
序列號的作用:在分佈式系統中,序列號可以被用於爲所有的事件進行全局排序,這樣客戶端可以通過序列號判斷事件的順序

短暫型節點
(1)臨時目錄節點:客戶端與zk斷開鏈接後,刪除節點,最適合用於動態節點上下線
(2)臨時順序編號目錄節點:客戶端與zk斷開鏈接後會刪除該節點,只是命名的時候會添加順序編號

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