一、Zookeeper理解與選舉機制
①Zookeeper理解
概念:Zookeeper 是一個開源的分散式協調服務框架 ,主要用來解決分散式叢集中應用系統的一致性問題和資料管理問題
特點:Zookeeper 本質上是一個分散式檔案系統, 適合存放小檔案,也可以理解為一個資料庫。
Zookeeper 中儲存的其實是一個又一個 Znode, Znode 是 Zookeeper 中的節點。
Znode 是有路徑的, 例如 /data/host1 , /data/host2 , 這個路徑也可以理解為是Znode 的 Name
Znode 也可以攜帶資料, 例如說某個 Znode 的路徑是 /data/host1 , 其值是一個字串 "192.168.0.1"
正因為 Znode 的特性, 所以 Zookeeper 可以對外提供出一個類似於檔案系統的試圖, 可以
通過操作檔案系統的方式操作 Zookeeper
- 使用路徑獲取 Znode
- 獲取 Znode 攜帶的資料
- 修改 Znode 攜帶的資料
- 刪除 Znode
- 新增 Znode
②Zookeeper架構
Zookeeper叢集是一個基於主從架構的高可用叢集
每個伺服器承擔如下三種角色中的一種
1.Leader 一個Zookeeper叢集同一時間只會有一個實際工作的Leader,它會發起並維護與各
Follwer及Observer間的心跳。所有的寫操作必須要通過Leader完成再由Leader將寫操作廣
播給其它伺服器。
2.Follower 一個Zookeeper叢集可能同時存在多個Follower,它會響應Leader的心跳。
Follower可直接處理並返回客戶端的讀請求,同時會將寫請求轉發給Leader處理,並且負
責在Leader處理寫請求時對請求進行投票。
3.Observer 角色與Follower類似,但是無投票權。
③Zookeeper的選舉機制
1.伺服器啟動時期的Leader選舉
進行leader選舉至少兩臺機器,一般都為奇數個機器,選舉過程如下:
①每個Server發起投票
②接收來自各個伺服器的投票
③處理投票:
- 優先檢查ZXID。ZXID比較大的伺服器優先作為Leader。
- 如果ZXID相同,那麼就比較myid。myid較大的伺服器作為Leader伺服器。
對於Server1而言,它的投票是(1, 0),接收Server2的投票為(2, 0),首先會比較兩者的
ZXID,均為0,再比較myid,此時Server2的myid最大,於是更新自己的投票為(2, 0),然後重
新投票,對於Server2而言,其無須更新自己的投票,只是再次向叢集中所有機器發出上一次
投票資訊即可。
④統計投票。
每次投票後,伺服器都會統計投票資訊,判斷是否已經有過半機器接受到相同的投票資訊,對於Server1、Server2而言,都統計出叢集中已經有兩臺機器接受了(2, 0)的投票資訊,此時便認為已經選出Leader。
⑤改變伺服器狀態
二、Zookeeper的Shell 客戶端操作
首先進入shell客戶端,有兩種方式:
①在bin資料夾下:zkCli.sh -server hadoop101:2181
②在bin資料夾下:zkCli.sh
正式操作:
列出path下的所有Znode
ls /
建立永久結點
create /hello world
/hello為路徑 world為攜帶的資料
建立臨時節點
create -e /tmp world
永久節點不會隨會話結束而消失,而臨時節點會隨著會話結束而消失
我們結束會話後,再次進入發現tmp目錄已經消失了
建立永久序列化節點
create -s /hello2 world
建立臨時序列化節點
create -e -s /tmp world
建立子節點(注意:只能給永久性節點創造子節點,臨時性節點不可創造子節點)
create /hello/aaa world
修改節點資料
set /hello xxx
刪除節點,如果要刪除的節點有子節點,則不能刪除
delete /hello
刪除節點,即使有子節點也可刪除
rmr /hello2
列出歷史記錄
history