您好,登錄后才能下訂單哦!
半數機制: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
1)首先要有一個main()線程
2)在main()線程中創建zookeeper的客戶端,這時就會創建兩個線程,一個負責網絡連接通信(connect),一個負責監聽(listen)
3)通過客戶端創建的connect線程將注冊的監聽事件發送給zookeeper
4)在zookeeper server端的注冊監聽器列表中將注冊的監聽事件添加到列表中
5)Zookeeper監聽到數據或路徑發生變化,就會將這個消息發送給listen線程
6)Listen線程調用內部的process()方法,就是發生了數據變化之后怎么辦,這是程序員自己開發的。
如圖:
我們client想server發送寫請求的時候,是如何進行寫操作的,各個server的數據時如何保持一致的
理解: 是client給server發送寫請求的時候,會把這個請求轉發給leader,(寫請求follower做不了主,但是讀請求可以做主),leader會把這個寫請求發送給各個server并進行寫數據的操作,當各個server數據寫完之后,會依次告知leader,當leader收到半數以上的server是寫成功的話,leader就會認為這個寫操作成功了,然后leader 在告知各個server,這條寫操作成功了,然后就在將成功的消息發送給客戶端,進行顯示,這樣就會保持每個server都有副本,數據從而達到一致
持久型(Persistent):客戶端和服務器斷開連接后,創建的鏈接不刪除
短暫型(Epheneral):客戶端個服務器斷開理解后,創建的節點自己刪除
持久節點包括:
(1)持久化目錄節點:客戶端不zk斷開鏈接后,節點依舊存在
(2)持久化順序編號目錄節點:客戶端與zk斷開鏈接后,節點依舊存在 只是zk給該節點名稱進行順序編號。
序列號的作用:在分布式系統中,序列號可以被用于為所有的事件進行全局排序,這樣客戶端可以通過序列號判斷事件的順序
短暫型節點:
(1)臨時目錄節點:客戶端與zk斷開鏈接后,刪除節點,最適合用于動態節點上下線
(2)臨時順序編號目錄節點:客戶端與zk斷開鏈接后會刪除該節點,只是命名的時候會添加順序編號
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。