好程式設計師Java教程分享Zookeeper基本原理與運用場景

好程式設計師IT發表於2019-10-23

好程式設計師 Java 教程分享 Zookeeper 基本原理與運用場景一、什麼是 Zookeeper

    zookeeper 是一個分散式的一致性協調服務。

     換句話說,也可以把 zookeeper 看成一個小型的分散式檔案系統。但是和 FastDFS 不同, zookeeper 只適合用來儲存一些小型的資料或者配置資訊。

 

二、Zookeeper的檔案系統

 

    zookeeper底層是一個樹形結構,進行資料的儲存。

Linux、Window等系統不同:

    Linux和Window中有檔案和資料夾的概念。資料夾下面只能有檔案,檔案下面不能再有資料。資料夾本身不存放資料,檔案本身用來進行資料儲存。

    Zookeeper中的節點,沒有資料夾和檔案之分,所有節點都可以進行資料儲存,同時也可以擁有子節點。每個節點稱之為znode

 

    znode的分類:

    1)臨時節點-ephemeral :臨時節點由某個客戶端建立,如果該客戶端斷開了和zookeeper伺服器的連結,則該臨時節點就會被自動刪除。注意:臨時節點不能有子節點。

    2)永續性節點-persistent:持久化的節點會永久存在於檔案系統中,除非客戶端顯示的刪除該節點。該節點是最常見的節點。

    3)臨時順序節點-ephemeral_sequential:和臨時節點擁有相同的特點,唯一的卻別在於該節點名稱會自動維護一個編號。

    4)永續性順序節點-persistent_sequential:和永續性節點擁有相同的特點,唯一的卻別在於該節點名稱會自動維護一個編號。

 

    檔案系統的操作命令:

    ls 路徑:檢視某個路徑下的子節點情況,zk中只能寫絕對路徑(所有的路徑都必須從/出發)

    create [-s] [-e] path data : 建立一個節點,在path路徑的位置。資料為data(資料不能為空,至少要為'')。-s表示順序節點 -e臨時節點

    get 路徑:檢視指定路徑對應的節點資料。每個節點都分為:資料部分、描述資訊

    set path data:修改指定節點的資料

    delete path:刪除指定節點資料,如果下面的有子節點需要先刪除子節點

 

 

三、Zookeeper的通知機制(watch)

 

    什麼是通知機制?

        客戶端可以選擇對某個znode進行監聽。當這個znode發生變化時(本身的新增、刪除、修改以及子節點的變化),會主動通知監聽了這個znode的客戶端。zookeeper的通知機制有一次性觸發原則,znode發生變化後,一旦通知了客戶端,則斷開客戶端的監聽,如果需要繼續監聽節點的變化,則必須重新發起監聽。

 

    exists - 可以監聽到節點建立、節點的內容修改、節點的刪除

    getData - 可以監聽節點內容修改,節點的刪除

    getChildren - 可以監聽子節點的新增、刪除(子節點內容變化和子節點的子節點的變化不能監聽)

 

四、Zookeeper的運用場景

 

    1)配置檔案統一管理

        在分散式叢集的工程中,通常由很多服務部署在不同的服務上,每個服務都有自己的配置資訊,如果需要修改某個配置,則可能需要對多型伺服器進行配置的修改,是非常不方便的。那麼就可以使用zookeeper幫助我們進行統一的配置檔案管理。

        在zookeeper上建立一個持久化節點,將所有的配置資訊放入到這個節點中,然後每臺伺服器都去監聽這個節點的變化(Watch機制)。如果有新的配置資訊,開發者只需要上傳到zookeeper的這個節點上(更新節點的配置資料)。每個服務就能收到zookeeper節點的更新通知,然後從節點中讀取新的配置,應用到系統中,完成配置的更新。

 

    2)叢集管理

        在某些叢集中,可能需要知道其他叢集伺服器的狀態,比如有新的機器加入叢集,或者有老的機器退出叢集等。這個時候就可以透過zookeeper進行叢集的統一管理。


 

    3)分散式鎖

        · 保持獨佔


                

        · 控制順序

              所有客戶端同時在一個節點的下面建立臨時順序節點。然後只需要讓編號最小的節點的機器獲得鎖就可以了。

        

五、Zookeeper的叢集

 

         叢集的工作原理:


 

        zookeeper叢集可能有N臺機器,這些機器中一定會存在一個leader,其他的機器就是follower。對於客戶端來說,可以隨意連線任何一個叢集中伺服器。如果某個客戶端需要對zk進行更改的操作,這些操作命令最終需要提交給leader。leader將命令分發給所有的叢集伺服器。當一半以上的叢集伺服器執行該命令成功,則leader就會通知所有節點進行事務提交,達到資料同步更新的目的。

 

         zookeeper叢集的“過半數存活原則”:

        在zookeeper叢集中,當存活的機器數量超過總叢集一半的時候,整個叢集才能正常工作。

        基於過半數存活原則,zookeeper的叢集數量一定是奇數臺。

 

        為什麼zookeeper需要設計一個過半數存活機制?

    


        因為整個叢集中,有可能因為“腦裂“,導致整個叢集分為2個甚至多個叢集,如果沒有“過半數存活的機制“,那麼整個zookeeper叢集提供的資料將無法再保證資料一致性。所以為了保證整體資料的強一致性,zookeeper規定了過半數存活這個原則。

        

         zookeeper叢集的角色:

        leader:領導者

        follower:追隨者

        observer:觀察者,觀察者和追隨者功能一樣,但是區別在於觀察者不會參與投票環節。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2661172/,如需轉載,請註明出處,否則將追究法律責任。

相關文章