什麼是zookeeper
zookeeper是一個開源的分佈式協調服務。
zookeeper 的設計目標:簡單的數據模型、可構建集羣、順序訪問、高性能。
zookeeper的特點:順序一致性、原子性、單一系統映像、可靠性
ZooKeeper 集羣
集羣角色
主節點Leader
既可以爲客戶端提供寫服務又能提供讀服務,主節點跟蹤從節點狀態和任務的有效性,並分配任務到從節點。如果是寫請求,那麼節點就會向 Leader 提交事務,Leader 接收到事務提交,會廣播該事務。 只要超過半數節點寫入成功,該事務就會被提交。
從節點 Follower
只能提供讀服務
觀察者Observer
只能提供讀服務,不參與選舉,不參與“過半寫成功”策略
Leader選舉算法-ZAB 協議
1、每次投票會包含所推舉的服務器的myid和ZXID,然後各自將這個投票發給集羣中其他機器。
2、各服務器接收到投票之後會進行進行檢查,如檢查是否是本輪投票、是否來自LOOKING狀態的服務器。
3、規則是優先檢查ZXID。ZXID比較大的服務器優先作爲Leader。
4、如果ZXID相同,那麼就比較myid。myid較大的服務器作爲Leader服務器
zookeeper結構
zNode數據節點
Zookeeper將所有數據存儲在內存中,這也就保證了 高吞吐量和低延遲。數據模型是一棵節點樹,由斜槓(/)的進行分割的路徑,就是一個Znode。 每個節點保存自己的數據內容,同時還會保存一系列屬性信息
節點類型
持久節點:一旦這個ZNode被創建了,除非主動進行ZNode的移除操作,否則這個ZNode將一直保存在Zookeeper上
臨時節點 :生命週期和客戶端會話綁定,一旦客戶端會話失效,那麼這個客戶端創建的所有臨時節點都會被移除
zookeeper客戶端命令
#打開客戶端
zkCli.sh
zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.01:2183
#查看znode節點
ls /
#創建znode節點
create /workers ""
#刪除節點
delete /workers
#退出
quit
#創建臨時節點
create -e /master "192.168.1.158:2223"
#獲取節點信息
get /master
#設置監視點 stat命令得到一個znode節點的屬性,並允許我們設置監視點
stat /master true