1. 程式人生 > >zookeeper學習筆記(二)--zkclient&curator詳解

zookeeper學習筆記(二)--zkclient&curator詳解

Zookeeper核心概念

分散式配置中心(儲存):disconf(zk)  diamond(mysql+http)

什麼是znode

ZooKeeper操作和維護的為一個個資料節點,稱為 znode,採用類似檔案系統的層級樹狀結構進行管理。如果 znode 節點包含資料則儲存為位元組陣列(byte array)。

建立 znode 時需要指定節點型別

znode 共有 4 種類型,分別為:持久(無序)、臨時(無序)、持久有序和臨時有序。

節點型別:

 2大類、四種類型 持久、臨時、持久有序、臨時有序

  PERSISTENT 持久型別,如果不手動刪除 是一直存在的

PERSISTENT_SEQUENTIAL

  EPHEMERAL 臨時 客戶端session失效就會隨著刪除節點 沒有子節點

EPHEMERAL_SEQUENTIAL 有序 自增

Stat資料結構:

Stat中記錄了這個 ZNode 的三個資料版本,分別是version(當前ZNode的版本)、cversion(當前ZNode子節點的版本)和 cversion(當前ZNode的ACL版本)。

Stat:狀態資訊、版本、許可權相關

狀態屬性

說明

czxid

節點建立時的zxid

mzxid

節點最新一次更新發生時的zxid

ctime

節點建立時的時間戳.

mtime

節點最新一次更新發生時的時間戳.

dataVersion

 節點資料的更新次數.

cversion

其子節點的更新次數

aclVersion

節點ACL(授權資訊)的更新次數.

ephemeralOwner

如果該節點為ephemeral節點, ephemeralOwner值表示與該節點繫結的session id. 如果該節點不是ephemeral節點, ephemeralOwner值為0. 至於什麼是ephemeral節點

dataLength

節點資料的位元組數.

numChildren

子節點個數.

Session會話:

客戶端來建立一個和zk服務端連線的控制代碼

連線狀態:CONNECTING\CONNECTED\CLOSED

什麼是watcher

Watcher(事件監聽器),是Zookeeper中的一個很重要的特性。Zookeeper允許使用者在指定節點上註冊一些Watcher,並且在一些特定事件觸發的時候,ZooKeeper服務端會將事件通知到感興趣的客戶端上去,該機制是Zookeeper實現分散式協調服務的重要特性。

Watcher:

KeeperState

EventType

觸發條件

說明

操作

SyncConnected
(3)

None
(-1)

戶端與服務端成功建立連線

此時客戶端和伺服器處於連線狀態

NodeCreated(1)

Watcher監聽的對應資料節點被建立

Create

NodeDeleted
(2)

Watcher監聽的對應資料節點被刪除

Delete/znode

NodeDataChanged
(3)

Watcher監聽的對應資料節點的資料內容發生變更

setDate/znode

NodeChildChanged
(4)

Wather監聽的對應資料節點的子節點列表發生變更

Create/child

Disconnected
(0)

None
(-1)

客戶端與ZooKeeper伺服器斷開連線

此時客戶端和伺服器處於斷開連線狀態

Expired
(-112)

None
(-1)

會話超時

此時客戶端會話失效,通常同時也會受到SessionExpiredException異常

AuthFailed
(4)

None
(-1)

通常有兩種情況,1:使用錯誤的schema進行許可權檢查 2:SASL許可權檢查失敗

通常同時也會收到AuthFailedException異常

介面

什麼是ACL

ACL(Access Control List)

內建的 ACL schemes

world:預設方式,相當於全世界都能訪問
auth:代表已經認證通過的使用者(cli中可以通過addauth digest user:pwd 來添加當前上下文中的授權使用者)
digest
:即使用者名稱:密碼這種方式認證,這也是業務系統中最常用的
ip:使用Ip地址認證

ACL支援許可權:

CREATE: 能建立子節點

READ:能獲取節點資料和列出其子節點

WRITE: 能設定節點資料

DELETE: 能刪除子節點

ADMIN: 能設定許可權

高效能

ZooKeeper 是高效能的。 在“讀”多於“寫”的應用程式中尤其地高效能,因為“寫”會導致所有的伺服器間同步狀態。(“讀”多於“寫”是協調服務的典型場景。)

 順序訪問

對於來自客戶端的每個更新請求,ZooKeeper 都會分配一個全域性唯一的遞增編號,這個編號反應了所有事務操作的先後順序,應用程式可以使用 ZooKeeper 這個特性來實現更高層次的同步原語。 這個編號也叫做時間戳——zxid(Zookeeper Transaction Id)

Zookeeper的Java客戶端API

原生:

<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.9</version>
</dependency>

org.apache.zookeeper.ZooKeeperMain

org.apache.zookeeper.CreateMode

ZkClient

<dependency>
  <groupId>com.101tec</groupId>
  <artifactId>zkclient</artifactId>
  <version>0.10</version>

</dependency>

Curator

<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-recipes</artifactId>
  <version>4.0.0</version>
</dependency>

<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-framework</artifactId>
  <version>4.0.0</version>
</dependency>

作業

Zookeeper原生的api操作zk

CRUD WATCHER znode節點玩下