zookeeper選舉機制及相關概念

一、zookeeper的一些概念

server和client:

server    指集羣的每一臺機器
client      指每一個向server請求服務的機器

zookeeper角色:

leader:爲客戶端提供寫服務,負責進行投票的發起和決議,更新系統狀態,事務請求的唯一調度和處理者
follower:爲客戶端提供讀服務,參與投票,包括事務請求proposal投票和leader選舉投票,接收客戶端請求,爲客戶端返回結果
observe:爲客戶端提供讀服務,不參與任何投票,包括事務請求proposal投票和leader選舉投票,同步leader的狀態,加快讀寫速度

znode(數據節點):
zookeeper將所有數據存在內存中,數據模型是一棵樹,用斜槓/進行分割的路徑就是一個znode,zkCli.sh使用命令行就是對znode的操作

zap協議
爲保證zookeeper服務的原子性,保證每個server間的狀態同步,包括兩種模式:
崩潰恢復模式:當服務啓動或leader服務器崩潰退出與重啓,zap進入崩潰恢復模式,選舉leader服務器或新的leader服務器,當leader被選舉出來後,且集羣中有過半的機器完成與leader服務器的狀態同步,zap就退出恢復模式
消息廣播模式:當集羣中有過半的follower完成 與leader的狀態同步,就進入消息廣播模式。當有新的server加入到zookeeper服務中,會以恢復模式啓動,找到leader服務器,完成狀態同步,然後一起參與到消息廣播模式

zookeeper特性:
順序一致性:同一個客戶端的請求嚴格按照其發起的順序執行
原子性:事務的一次執行在每個server上應該是一致的,要麼都執行,要麼都不執行
單一視圖:每個server的數據視圖都是一樣的
實時性:在一定時間內,zookeeper應該保證client讀取的數據是最新的

二、zookeeper選舉

zookeeper選舉
zookeeper節點狀態:

LOOKING
LEADING
FOLLOWERING
OBSERVE

當最初的時候,每個server的最初狀態都是LOOKING,當leader服務器選舉出來後,leader服務器狀態變爲LEADING,不是observe服務器的server的狀態自動變爲FOLLOWERING,當leader服務器掛掉之後,所有非observe的server將狀態都改爲LOOKING,進行新的選舉,選舉出新的leader服務器,然後leader服務器狀態變爲LEADING,不是observe的server的狀態自動變爲FOLLOWERING。

zxid(zookeeper事務id):
zookeeper狀態每次改變都會收到一個不同全局唯一的zxid,刪除節點,創建節點都會使zookeeper狀態改變,zxid不斷遞增

leader服務器選取規則:
優先檢查zxid,zxid大的作爲leader服務器
zxid相同就比較myid大小,myid大的作爲leader服務器
只有獲取過半server的支持才能成爲leader

zookeeper選舉算法:
basic paxos和fast paxos
basic paxos:選舉線程向所有server發起一次詢問,按照服務器選取規則去比較,選出下一次要詢問的server,當被選取的server有一般server支持,則成爲leader服務器,不然就一直選舉,直到選出了leader
fast paxos:一個server聲明自己要做leader,其它server將配合工作,解決zxid和epoch衝突,並向該server發送接收提議的消息

三、zookeeper命令行

zookeeper命令行使用:
將zookeeper加入環境變量後,在命令行運行zkCli.sh進入zookeeper命令行,連接不同的主機用

./zkCli.sh -server_ip:port

創建節點(znode):

create [-s][-e] path data acl  
-s爲順序節點,-e爲臨時節點,退出zookeeper命令行後就刪除,不指定默認爲永
久節點   
例:create /zk-permanent 123    創建永久節點/zk-permanent

讀取節點(znode):

ls path 或者 ls2 path 或者 get path      
例:
ls /  查看根目錄下的znode
get或ls2 /zk-permanent查看節點 /zk-permanent的詳情

更新節點(znode):

set path data     
例:set /zk-permanent 456 將/zk-permanent的內容更新爲456

刪除節點(znode):

delete path      
例:delete /zk-permanent,注意,若刪除節點存在子節點,則無法完成刪除,必須先刪除子節點才能刪除父節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章