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:觀察者,觀察者和追随者功能一樣,但是差別在于觀察者不會參與投票環節。