Zookeeper學習(一)

清風紫雪發表於2020-08-09

一、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

 

 

 

相關文章