Zookeeper 創建6種的節點實例(轉)

原文:https://blog.csdn.net/pengweismile/article/details/115444734

作者:偉娃娃

Zookeeper是Apache Hadoop的一個子項目,它主要用來解決分佈式系統中經常遇到的一些數據管理問題,例如,統一命名,狀態同步,集羣管理,分佈式應用配置管理。

Zookeeper的定位,這個動物園的管理者,如下圖

ookeeper又2個特性
特性一 樹形結構,每個子目錄可以被增加刪除

特性二 事件監聽機制

特性一
zookeeper可以對目錄樹中的任意一個節點進行監聽。監聽是隻監聽目錄下面的目錄變化。

zookeeper類似一個文件系統,每個子目錄被稱爲目錄節點,允許我們自由的增加刪除目錄節點。

 

znode節點的類型:

持久化目錄節點(PERSISTENT), 創建好之後就永久存在
持久化順序編號節點(PERSISTENT_SEQUENTIAL),創建好節點後還可以默認帶個自增的編號
臨時目錄節點(EPHEMERAL),和sessionId綁定的,當客戶端被關閉之後,對於的臨時目錄節點會被刪除
歷史順序編號目錄節點(EPHEMERAL_SEQUENTIAL),臨時節點帶個自增的編號
容器節點(Container),3.5.3新增的特性,沒有子節點的容器節點會被清除掉。
TTL節點,3.5.3新增的特性,位節點設定了失效時間。具體失效時間卻決於後臺檢測失效線程的輪詢頻率。
臨時節點被刪除過程:

 

長連接和短連接的區別,根據自己的業務來定的。

Zookeeper的安裝

Step1:配置JAVA環境,檢驗環境:

java ‐version

Step2: 下載解壓 zookeeper

wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper‐3.5.8/apache‐zookeeper‐3.5.8‐bin.tar.gz

https://zookeeper.apache.org/releases.html#download

tar ‐zxvf apache‐zookeeper‐3.5.8‐bin.tar.gz
 
cd apache‐zookeeper‐3.5.8‐bin

Step5: 檢測是否啓動成功

ps -ef| grep zookeeper

Step6: 連接服務器

bin/zkCli.sh ‐server ip:port

創建不同的節點

-s: 順序節點-

e: 臨時節點

-c: 容器節點

-t: 可以給節點添加過期時間,默認禁用,需要通過系統參數啓用

zoomkeeper在目錄上的增刪改查

[zk: localhost:2181(CONNECTED) 4] create /test "hello"
Created /test
[zk: localhost:2181(CONNECTED) 5] get /test
hello
[zk: localhost:2181(CONNECTED) 6] set /test "hello world"
[zk: localhost:2181(CONNECTED) 7] get /test
hello world
[zk: localhost:2181(CONNECTED) 8] delete /test
[zk: localhost:2181(CONNECTED) 9] get /test
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /test
[zk: localhost:2181(CONNECTED) 10] 

ZK中沒有相對路徑一說, 所有路徑都是絕對路徑。

創建子目錄,操作

[zk: localhost:2181(CONNECTED) 10] create /test1/sub1 hello
Node does not exist: /test1/sub1
[zk: localhost:2181(CONNECTED) 11] create /test1 hello1
Created /test1
[zk: localhost:2181(CONNECTED) 12] create /test1/sub1 "hello sub"
Created /test1/sub1
[zk: localhost:2181(CONNECTED) 13] ls -R /test1
/test1
/test1/sub1

創建順序節點 -s

 
[zk: localhost:2181(CONNECTED) 22] create /seq
Created /seq
[zk: localhost:2181(CONNECTED) 24] create -s /seq/Allen- "hello"
Created /seq/Allen-0000000001
[zk: localhost:2181(CONNECTED) 25] create -s /seq/Allen- "hello"
Created /seq/Allen-0000000002
[zk: localhost:2181(CONNECTED) 26] create -s /seq/Allen- "hello"
Created /seq/Allen-0000000003
[zk: localhost:2181(CONNECTED) 27] create -s /seq/Allen- "hello"
Created /seq/Allen-0000000004
[zk: localhost:2181(CONNECTED) 28] create -s /seq/Allen- "hello"
Created /seq/Allen-0000000005
[zk: localhost:2181(CONNECTED) 30] ls -R /seq
/seq
/seq/Allen-0000000001
/seq/Allen-0000000002
/seq/Allen-0000000003
/seq/Allen-0000000004
/seq/Allen-0000000005
[zk: localhost:2181(CONNECTED) 31] 

創建臨時節點 -e:

[zk: localhost:2181(CONNECTED) 31] create -e /ephemeral "hello ephemeral"
Created /ephemeral
[zk: localhost:2181(CONNECTED) 32] get -s /ephemeral
hello ephemeral
cZxid = 0x15
ctime = Mon Apr 05 03:57:30 PDT 2021
mZxid = 0x15
mtime = Mon Apr 05 03:57:30 PDT 2021
pZxid = 0x15
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1001f373c3a0001
dataLength = 15
numChildren = 0

臨時節點與持久節點的區別在於上面節點元數據信息的ephemeraOwner的值是不一樣的。當客戶端關掉,臨時節點就沒有了。臨時節點下面是不能有子節點的。

[zk: localhost:2181(CONNECTED) 34] create -e /ephemeral/sub
Ephemerals cannot have children: /ephemeral/sub
[zk: localhost:2181(CONNECTED) 35] 

 

[zk: localhost:2181(CONNECTED) 33] get -s /seq
null
cZxid = 0xe
ctime = Mon Apr 05 03:54:16 PDT 2021
mZxid = 0xe
mtime = Mon Apr 05 03:54:16 PDT 2021
pZxid = 0x14
cversion = 6
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 6
[zk: localhost:2181(CONNECTED) 34] 

創建臨時順序節點 -e -s

[zk: localhost:2181(CONNECTED) 37] create -e -s /seq-eph
Created /seq-eph0000000005
[zk: localhost:2181(CONNECTED) 38] create -e -s /seq-eph
Created /seq-eph0000000006
[zk: localhost:2181(CONNECTED) 39] create -e -s /seq-eph

創建container節點 -c, 唯一的區別是,當刪除掉container節點下的所有子節點後, container節點本身也會被清除掉

[zk: localhost:2181(CONNECTED) 3] create -c /container
Created /container
[zk: localhost:2181(CONNECTED) 4] create /container/sub1
Created /container/sub1
[zk: localhost:2181(CONNECTED) 5] create /container/sub2
Created /container/sub2
[zk: localhost:2181(CONNECTED) 6] create /container/sub3
Created /container/sub3
[zk: localhost:2181(CONNECTED) 7] ls -R /container
/container
/container/sub1
/container/sub2
/container/sub3
[zk: localhost:2181(CONNECTED) 8] delete /container/sub1
[zk: localhost:2181(CONNECTED) 9] delete /container/sub2
[zk: localhost:2181(CONNECTED) 10] delete /container/sub3
[zk: localhost:2181(CONNECTED) 11] ls /
[container, seq, seq0000000002, test1, zookeeper]
[zk: localhost:2181(CONNECTED) 12] ls /
[container, seq, seq0000000002, test1, zookeeper]
[zk: localhost:2181(CONNECTED) 16] ls /
[seq, seq0000000002, test1, zookeeper]

創建就ttl節點 -t ,ttl節點的特性是可以創建一個打失效時間的節點,失效時間過來之後節點會被自動刪除。

1. 關閉服務

[allen@localhost bin]$ ./zkServer.sh stop ../zoo.cfg 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ../zoo.cfg
Stopping zookeeper ... ./zkServer.sh: line 213: kill: (61723) - No such process
STOPPED
[allen@localhost bin]$ 

2. 添加擴展的業務,在zkServer.sh 中增加如下配置

-Dzookeeper.extendedTypesEnabled=true

 3. 重新啓動服務

[allen@localhost bin]$ ./zkServer.sh start ../zoo.cfg 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ../zoo.cfg
Starting zookeeper ... STARTED
[allen@localhost bin]$ vi zkServer.sh 
[allen@localhost bin]$ ./zkCli.sh
/usr/bin/java
Connecting to localhost:2181

如下, ttl-note在一段時間後自己就沒有了,不用手動刪除。

[zk: localhost:2181(CONNECTED) 0] create -t 5000 /ttl-node ttttt
Created /ttl-node
[zk: localhost:2181(CONNECTED) 1] ls /
[seq, seq0000000002, test1, ttl-node, zookeeper]
[zk: localhost:2181(CONNECTED) 2] ls /
[seq, seq0000000002, test1, ttl-node, zookeeper]
[zk: localhost:2181(CONNECTED) 9] ls /
[seq, seq0000000002, test1, ttl-node, zookeeper]
[zk: localhost:2181(CONNECTED) 10] ls /
[seq, seq0000000002, test1, zookeeper]
[zk: localhost:2181(CONNECTED) 11] 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章