2 Zookeeper原理

Zookeeper原理

 選舉機制


1)半數機制:集羣中半數以上機器存活,集羣可用。所以Zookeeper適合安裝奇數臺服務器。
2)Zookeeper雖然在配置文件中並沒有指定Master和Slave。但是,Zookeeper工作時,是有一個節點爲Leader,其他則爲Follower,Leader是通過內部的選舉機制臨時產生的。
3)以一個簡單的例子來說明整個選舉的過程。
假設有五臺服務器組成的Zookeeper集羣,它們的id從1-5,同時它們都是最新啓動的,也就是沒有歷史數據,在存放數據量這一點上,都是一樣的。假設這些服務器依序啓動,來看看會發生什麼。

(1)服務器1啓動,此時只有它一臺服務器啓動了,它發出去的報文沒有任何響應,所以它的選舉狀態一直是LOOKING狀態。

(2)服務器2啓動,它與最開始啓動的服務器1進行通信,互相交換自己的選舉結果,由於兩者都沒有歷史數據,所以id值較大的服務器2勝出,但是由於沒有達到超過半數以上的服務器都同意選舉它(這個例子中的半數以上是3),所以服務器1、2還是繼續保持LOOKING狀態。

(3)服務器3啓動,根據前面的理論分析,服務器3成爲服務器1、2、3中的老大,而與上面不同的是,此時有三臺服務器選舉了它,所以它成爲了這次選舉的Leader。

(4)服務器4啓動,根據前面的分析,理論上服務器4應該是服務器1、2、3、4中最大的,但是由於前面已經有半數以上的服務器選舉了服務器3,所以它只能接收當小弟的命了。

(5)服務器5啓動,同4一樣當小弟。

 

Zookeeper節點數據操作流程

 

1.在Client向Follwer發出一個寫的請求
2.Follwer把請求發送給Leader
3.Leader接收到以後開始發起投票並通知Follwer進行投票
4.Follwer把投票結果發送給Leader
5.Leader將結果彙總後如果需要寫入,則開始寫入同時把寫入操作通知給Leader,然後commit;
6.Follwer把請求結果返回給Client

監聽器原理

 


監聽原理詳解:
1)首先要有一個main()線程
2)在main線程中創建Zookeeper客戶端,這時就會創建兩個線程,一個負責網絡連接通信(connet),一個負責監聽(listener)。
3)通過connect線程將註冊的監聽事件發送給Zookeeper。
4)在Zookeeper的註冊監聽器列表中將註冊的監聽事件添加到列表中。
5)Zookeeper監聽到有數據或路徑變化,就會將這個消息發送給listener線程。
6)listener線程內部調用了process()方法。

  常見的監聽
(1)監聽節點數據的變化:
get path [watch]
 (2)監聽子節點增減的變化
ls path [watch]

 

 

 

 

 

 

 

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