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節點狀態:
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加入環境變數後,在命令列執行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,注意,若刪除節點存在子節點,則無法完成刪除,必須先刪除子節點才能刪除父節點
Linux公社的RSS地址:ofollow,noindex" target="_blank">https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-09/154117.htm