1. 程式人生 > 其它 >zookeeper 基礎使用

zookeeper 基礎使用

一、 下載 zookeeper , 網址 https://zookeeper.apache.org/releases.html

二、 解壓後,複製建立配置檔案

  在 conf 目錄下有一個 zoo_sample.cfg 的示例,

cp zoo_sample.cfg zoo.cfg

三、啟動服務端

./bin/zkServer.sh start ./conf/zoo.cfg

-- 執行結果啟動成功

zb:zookeeper-3.7.0 zhangbin-beijing$ ./bin/zkServer.sh start ./conf/zoo.cfg 

ZooKeeper JMX enabled by default

Using config: ./conf/zoo.cfg

Starting zookeeper ... STARTED

四、啟動客戶端

./bin/zkClient.sh -server 127.0.0.1:2181

-- 執行結果

[zk: 127.0.0.1:2181(CONNECTED) 0]

五、 使用 help 檢視命令

[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd args
    addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
    addauth scheme auth
    close 
    config [
-c] [-w] [-s] connect host:port create [-s] [-e] [-c] [-t ttl] path [data] [acl] delete [-v version] path deleteall path [-b batch size] delquota [-n|-b|-N|-B] path get [-s] [-w] path getAcl [-s] path getAllChildrenNumber path getEphemerals path history listquota path
ls [-s] [-w] [-R] path printwatches on|off quit reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*] redo cmdno removewatches path [-c|-d|-a] [-l] set [-s] [-v version] path data setAcl [-s] [-v version] [-R] path acl setquota -n|-b|-N|-B val path stat [-w] path sync path version whoami

服務和客戶端都啟動成功後, 我們就可以來看看一些簡單的操作了

一、持久化節點

1.1、 建立 zookeeper 節點命令

create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl]

/*
中括號為可選項,沒有則預設建立持久化節點 
-s: 順序節點 
-e: 臨時節點 
-c: 容器節點
-t: 可以給節點新增過期時間,預設禁用,需要通過系統引數啟用
 節點使用絕對路徑
*/
create /test-node som-data

1.2、檢視節點, 修改節點

set /test-node hello
get -s /test-node  // -s 檢視並且帶狀態

stat /teset-node  //檢視狀態

[zk: 127.0.0.1:2181(CONNECTED) 11] get -s /test-node hello // cZxid = 0x2 //建立 znode 的事務ID ctime = Fri May 06 11:36:30 CST 2022 //znode建立時間 mZxid = 0x3 //最後修改znode的事務ID mtime = Fri May 06 11:36:55 CST 2022 //znode最近修改時間 pZxid = 0x2 //最後新增或刪除子節點的事務ID cversion = 0 //znode的子節點結果集版本 dataVersion = 1 //znode的當前資料版本 aclVersion = 0 //znode的 ACL 版本 ephemeralOwner = 0x0 //znode是臨時node時,表示znode所有者的session ID, 如果不是臨時node,則欄位為0 dataLength = 5 //znode資料欄位的長度 numChildren = 0 //znode的子znode 的數量

1.3、 根據 dataVersion 版本號實現樂觀鎖

//先對/test-node 進行修改,資料版本變為2
set /test-node hello world

//再指定在版本1的基礎上進行修改
[zk: 127.0.0.1:2181(CONNECTED) 13] set -v 1 /test-node lockstat
version No is not valid : /test-node

//修改失敗,重試在版本2的基礎上修改,成功
[zk: 127.0.0.1:2181(CONNECTED) 14] set -v 2 /test-node lockstat
[zk: 127.0.0.1:2181(CONNECTED) 15] get /test-node
lockstat

1.4、 檢視節點

ls /test-node

ls -R /

二、臨時節點

2.1、 建立臨時節點, 臨時節點不能建立子節點

create -e /ephemeral data    
get /ephemeral
set /ephemeral hello

2.2、 建立順序節點  -s ,  建立臨時順序節點再加 -e

create /seq-parent data  //為了分類,建立一個父節點

create -s /seq-parent/ data  //順序節點遞增
-> Created /seq-parent/0000000000

get /seq-parent/0000000000 
-> data

create -s /seq-parent/x seq-data //帶字首的書序節點
-> Created /seq-parent/x0000000001
create -s /seq-parent/y seq-data
-> Created /seq-parent/y0000000002

三、容器節點

3.1、 建立容器節點

  容器節點主要用來容納位元組點,如果沒有給其建立子節點,容器節點表現和持久化節點一樣,如果給容器節點建立了子節點,後續又把子節點清空,容器節點也會被zookeeper刪除。
create -c /container

 

四、事件監聽機制

    針對節點的監聽:一定事件觸發,對應的註冊立刻被移除,所以事件監聽是一次性的
get -w /path   //註冊監聽的同時獲取資料

stat -w /path  //對節點進行監聽,且獲取元資料資訊

ls -R -w /path //-R區分大小寫, 一定用大寫, 針對遞迴子目錄的監聽,每個目錄的監聽是一次性的,但是child1 和 child2 是兩個監聽,觸發完 child1 後child1失效,但還可以觸發child2
create /path

get -w /path

set /path /root

-> WATCHER:: 
-> WatchedEvent state:SyncConnected type:NodeDataChanged path:/path
Zookeeper事件型別:   None: 連線建立事件   NodeCreated: 節點建立   NodeDeleted: 節點刪除   NodeDataChanged:節點資料變化   NodeChildrenChanged:子節點列表變化   DataWatchRemoved:節點監聽被移除   ChildWatchRemoved:子節點監聽被移除