1. 程式人生 > >Zookeeper探究之基礎知識總結

Zookeeper探究之基礎知識總結

一、Zookeeper介紹

Zookeeper是一個高效能、分散式、開源分散式的應用協調服務框架。它提供簡單原始的功能,分散式應用可以基於它實現更加高階的服務,比如同步,配置管理,叢集管理,名空間。它被設計為易用程式設計,使用檔案系統目錄樹作為資料模型。服務端跑在java上,提供java和C的客戶端API。(所謂分散式系統就是多臺計算機之間相互協調工作,之間使用網路進行通訊,彼此互動,完成共同的目標。)

資料模型

  1. Zookeeper使用分層結構,使用檔案系統目錄樹作為資料模型,樹形結構中的每一個節點叫做Znode,每一個Znode節點都有資料(byte[]型別),也可以有子節點。
  2. 節點路徑使用“/”來作為字首,沒有相對路徑。
  3. 內部使用資料結構stat來儲存資料的變化,ACL的變化和時間戳。
  4. 資料發生變化時,版本號會遞增。
  5. 可以對Znode節點中的資料進行讀寫操作。

資料模型可參考下圖所示:
在這裡插入圖片描述

Zookeeper典型應用場景介紹

  1. 資料釋出/訂閱
    即配置中心,釋出者將一系列資料傳送到zk的一個或一系列節點上,訂閱者進行資料訂閱,當資料有變化時,可以及時得到資料的變化通知。
    在這裡插入圖片描述

  2. 負載均衡
    本質利用了Zookeeper的配置管理。主要步驟如下:
    (1)服務提供者把自己的域名和IP埠對映註冊到ZK中。
    (2)服務消費者通過域名從zk中獲取對應的IP和埠號,這個IP和埠號有多個,只是獲取其中一個。
    (3)當伺服器宕機時,對應的域名和IP會減少一個,並不影響消費者的呼叫。
    (阿里的Dubbo服務框架就是基於ZK來來實現服務路由和負載)

  3. 命名服務
    在分散式系統中,命名服務(Name Service)也是很重要的應用場景,通過zk也可以實現類似於J2EE中JDNI的效果;分散式環境中,命名服務更多是資源定位,並不是真正的實體資源,其本質也是用到了zk的集中配置管理和查詢。

  4. 叢集管理
    主要可以負責叢集的節點數量,節點的狀態,節點的上下線操作以及統一配置。

  5. Master選舉
    順序節點和臨時節點(後續會講解如何建立)。

  6. 分散式鎖
    主要包括排它鎖和共享鎖。

  7. 分散式佇列(FIFO)

基本概念

  1. 叢集角色:
  • Leader:為客戶端提供讀寫服務
  • Follower:提供讀服務,所有寫服務都需要轉交給Leader角色,參與選舉
  • Observer:提供讀服務,不參與選舉過程,一般是為了增強zk叢集的讀請求與併發能力
  1. 會話(Session)
    ZK客戶端與ZK服務端之間的連線通過心跳檢測保持客戶端之間的存活,客戶端可以接收來自服務端watch事件的通知,可以設定連線之間的超時時間。

  2. 資料節點(Znode)
    ZK中的每個資料節點可以儲存資料,主要分為三類節點。

  • 持久節點:一旦建立,除非主動呼叫刪除操作,否則會一直儲存在ZK上
  • 臨時節點:與客戶端會話繫結,一旦客戶端會話失效,這個客戶端建立的所有節點都會被移除
  • SEQUENTIAL Znode:建立節點時,如果設定屬性為SEQUENTIAL,則會自動在節點名後面追加一個整型數字。
  1. 版本(Version)
  • Version:當前Znode的版本。
  • Cversion:當前Znode子節點的版本。
  • Aversion:當前Znode的ACL(訪問控制)版本。
  1. Watcher
  • 作用於Znode節點上
  • 多種事件通知:資料更新,子節點狀態等。
  1. ACL(訪問控制列表)
    類似於linux的許可權控制。
  • CREATE:建立子節點的許可權
  • READ:獲取當前節點資料和子節點列表的許可權
  • WRITE:更新節點資料的許可權
  • DELETE:刪除子節點的許可權
  • ADMIN:設定節點ACL的許可權

二、Zookeeper的安裝使用

Zookeeper的安裝非常簡單,下載安裝包解壓即可。
下載地址:http://www.apache.org/dyn/closer.cgi/zookeeper/
啟動指令碼在安裝目錄的bin目錄下,不過啟動之前應該進行相關配置,將安裝目錄下的conf目錄的zoo_sample.cfg例配置檔案,修改為zoo.cfg檔案。主要有以下幾個配置引數需要說明:

  • tickTime:預設3000ms,作為一種基本單元,可用它的倍數來表示系統內部的時間間隔配置,比如:
    • 2tickTime是客戶端會話的超時時間
    • 1
    tickTime是客戶端Њzk服ԇ器端的心跳時間
  • dataDir:無預設配置,必須配置;主要用於配置儲存快照檔案的目錄,如果沒有配置dataLogDir,那麼事務日誌也會儲存在此目錄
  • clientPort:zk的執行埠,預設是2181

啟動

ZK的啟動非常簡單,只需執行bin目錄下的zkServer.sh指令碼即可(windows下zkServer.cmd)。然後執行zkCli.sh連線即可,如果不帶引數預設連線localhost下的2181埠。可以使用zkCli.sh -server ip:port連線到指定伺服器地址。

客戶端命令

在啟動zk客戶端之後,可以鍵入help檢視提示命令資訊。
在這裡插入圖片描述

讀取
ls path [watch]
– ls path [watch]
• Path表示指定資料節點的節點路徑
• 列出指定節點下的所有子節點
• 只能檢視第一級的所有子節點
• 剛安裝時 ls / 只有預設的zookeeper保留節點
• Watch表示監聽path的子節點的變化

建立
create [-s] [-e] path data acl
• 建立zookeeper節點
• -s或者-e表示建立的是順序或臨時節點,不加預設建立的是持久節點
• Path為節點的全路徑,沒有相對節點的表示方式
• Data為當前節點記憶體儲的資料
• Acl 用來進行許可權控制,預設情況不做任何許可權控制
在這裡插入圖片描述

讀取
get path [watch]
• 獲取指定節點的資料內容和屬性資訊
• Path表示指定資料節點的節點路徑
• 下圖中
– 123:節點內的資料
– cZxid:為建立該節點的事務id
– Mzxid:最後一次更新該節點的事務id
– Mime:為最後一次更新時間
– Cversion:子節點版本
– dataVersion:資料版本
– aclVersion:訪問控制版本
在這裡插入圖片描述

更新
set path data [version]
• 更新指定節點的資料內容
• Path表示被更新的節點路徑
• data為更新的資料
• Version指定被更新的資料版本,一般不指定,如果資料版本ٝ已經更新,則指定舊版本時會報錯
在這裡插入圖片描述

刪除
delete path [version]
• 刪除指定節點
• Path表示被刪除的節點
• Version指定被刪除的資料版本,一般不指定,如果資料版本ٝ經更新,則指定舊版本時會報錯
在這裡插入圖片描述


後續探究待繼續…

歡迎加入大資料開發群一起學習交流:
在這裡插入圖片描述