1. 程式人生 > >8.4.4.Zookeeper結構和命令

8.4.4.Zookeeper結構和命令

src upgrade 自己 不能 style 周期性 oct 路徑 五個

1. Zookeeper結構

1.1.ZooKeeper數據模型Znode

  ZooKeeper擁有一個層次化的目錄結構,命名符合常規文件系統規範

  ZooKeeper樹中的每個節點被稱為—Znode。和文件系統的目錄樹一樣,ZooKeeper樹中的每個節點可以擁有子節點,並且其有一個唯一的路徑標識

  節點Znode可以包含數據和子節點(但是EPHEMERAL類型的節點不能有子節點)

  客戶端應用可以在節點上設置監視器

  技術分享圖片

2. Zookeeper命令行客戶端操作

  啟動Zookeeper服務之後,輸入以下命令,連接到Zookeeper服務:zkCli.sh -server localhost:2183(連接到自己的zookeeper服務)

                                zkCli.sh -server shizhan2:2183(連接到其他的zookeeper服務)

  連接成功之後,系統會輸出Zookeeper的相關環境及配置信息,並在屏幕輸出“welcome to Zookeeper!”等信息。輸入help之後,屏幕

會輸出可用的Zookeeper命令,如下圖所示

  技術分享圖片

  輸入connect zhizhan2:2183可以連接到其他zookeeper服務(默認端口是2181,我修改為2183了)

2.1 使用Zookeeper命令的簡單操作步驟

  (1) 使用ls命令查看當前Zookeeper中所包含的內容:ls /

[zk: localhost:2183(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2183(CONNECTED) 2] 

  (2) 創建一個新的Znode節點"zk",以及與它關聯的字符串,執行命令:create /zk "myData"(默認持久節點)

[zk: localhost:2183(CONNECTED) 2] create /zk "myData"
Created /zk

  (3) 再次使用ls命令來查看現在Zookeeper的中所包含的內容:ls /

[zk: localhost:2183(CONNECTED) 3] ls /
[zk, zookeeper]

  (4) 使用get命令來確認第二步中所創建的Znode是否包含我們創建的字符串,執行命令:get /zk

技術分享圖片
[zk: localhost:2183(CONNECTED) 4] get /zk
"myData"
cZxid = 0x100000008
ctime = Tue Jun 05 19:02:42 CST 2018
mZxid = 0x100000008
mtime = Tue Jun 05 19:02:42 CST 2018
pZxid = 0x100000008
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0

#監聽這個節點的數據變化,當另外一個客戶端改變/zk,它會打出下面的

[zk: localhost:2181(CONNECTED) 4] get /zk watch

#WATCHER::

#WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk

技術分享圖片  

  (5) 接下來通過set命令來對zk所關聯的字符串進行設置,執行命令:set /zk "zb"

技術分享圖片
[zk: localhost:2183(CONNECTED) 5] set /zk "zb"
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000007
mtime = Fri Oct 17 03:55:50 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
技術分享圖片

  (7) 下面我們將剛才創建的Znode刪除,執行命令:delete /zk

[zk: localhost:2183(CONNECTED) 7] delete /zk

  (8)刪除節點:rmr(效果同上),執行命令:rmr /zk

[zk: localhost:2183(CONNECTED) 7] rmr /zk

ZooKeeper節點屬性

通過前面的介紹,我們可以了解到,一個節點自身擁有表示其狀態的許多重要屬性,如下圖所示。

 技術分享圖片

ZooKeeper節點類型

1、Znode有兩種類型:

  臨時節點(ephemeral)(斷開連接自己刪除)該節點的生命周期依賴於創建它們的會話。一旦會話(Session)結束,臨時節點將被自動刪除,當然可以也

可以手動刪除。雖然每個臨時的Znode都會綁定到一個客戶端會話,但他們對所有的客戶端還是可見的。另外,ZooKeeper的臨時節點不允許擁有子節點。

  持久節點(persistent)(斷開連接不刪除)該節點的生命周期不依賴於會話,並且只有在客戶端顯示執行刪除操作的時候,他們才能被刪除。

2.2 Zookeeper的api的簡單使用  

  Zookeeper API共包含五個包,分別為:  

(1)org.apache.zookeeper
(2)org.apache.zookeeper.data
(3)org.apache.zookeeper.server
(4)org.apache.zookeeper.server.quorum
(5)org.apache.zookeeper.server.upgrade

  org.apache.zookeeper.Zookeeper 是客戶端入口主類,負責建立與server的會話

  如果要使用Zookeeper服務,應用程序首先必須創建一個Zookeeper實例,這時就需要使用此類。一旦客戶端和Zookeeper服務建立起了連接,

Zookeeper系統將會給次連接會話分配一個ID值,並且客戶端將會周期性的向服務器端發送心跳來維持會話連接。只要連接有效,客戶端就可以使

用Zookeeper API來做相應處理了

  Zookeeper類提供了如下圖所示的幾類主要方法:

功能

描述

create

在本地目錄樹中創建一個節點

delete

刪除一個節點

exists

測試本地是否存在目標節點

get/set data

從目標節點上讀取 / 寫數據

get/set ACL

獲取 / 設置目標節點訪問控制列表信息

get children

檢索一個子節點上的列表

sync

等待要被傳送的數據

2.3 Zookeeper API的使用(Demo增刪改查程序)

  

                          

  

  

  

  

  

8.4.4.Zookeeper結構和命令