Zookeeper集羣有什麼用?

一,命名服務(用到了zookeeper的文件系統)

命名服務是指通過指定的名字獲取資源或者服務的地址,利用zk創建一個全局的路徑,提供服務的地址或者一個遠程的對象等等。(Dubbo就是用zookeeper作爲服務註冊中心的)

二,配置管理(用到了zookeeper的文件系統,通知機制)

程序分佈式的部署在不同的機器上,將程序的配置信息放在zk的znode下,當有配置發生改變時,也就是znode發生變化時,可以通過改變zk中某個目錄節點的內容,利用watcher通知給各個客戶端,從而更改配置。

三,集羣管理(用到了zookeeper的文件系統,通知機制)——幫助其他軟件搭建集羣

所謂集羣管理無在乎兩點:是否有機器退出和加入、選舉master。

對於第一點,所有機器約定在父目錄下創建臨時目錄節點然後監聽父目錄節點的子節點變化消息。一旦有機器掛掉,該機器與 zookeeper的連接斷開,其所創建的臨時目錄節點被刪除,所有其他機器都收到通知:某個兄弟目錄被刪除,於是,集羣就知道某個節點掛掉了

新機器加入也是類似,會在該父目錄下創建一個臨時子節點,然後所有機器收到通知:新兄弟目錄加入

對於第二點,所有機器在zookeeper中都創建臨時順序編號目錄節點,每次選取編號最小的機器作爲master就好。

四,分佈式鎖(用到了zookeeper的文件系統,通知機制)

有了zookeeper的全局一致性文件系統,鎖的問題變得容易。鎖服務可以分爲兩類,一個是保持獨佔,另一個是控制時序。

對於獨佔鎖,我們將zookeeper上的一個znode看作是一把鎖,通過createznode的方式來實現。所有客戶端都去創建 /distribute_lock 節點,最終成功創建的那個客戶端也即擁有了這把鎖。用完刪除掉自己創建的distribute_lock 節點就釋放出鎖。

對於控制時序鎖, /distribute_lock 已經預先存在,所有客戶端在它下面創建臨時順序編號目錄節點,和選master一樣,編號最小的獲得鎖,用完刪除,依次執行。

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