ZooKeeper基本操作

安裝Zookeeper
https://blog.csdn.net/greenplum_xiaofan/article/details/99020516#31_Zookeeper_40

1、ZK的數據模型

1) 樹形結構: /		
2)	ZK中的每個節點:znode,唯一的路徑標識
		a)	每個znode都有自己的版本號
		b)	znode信息發生變化,那麼version+1
		c)	znode數據量不要太大,幾K就差不多了,都是存一些配置信息
		d)	權限
		e)	Watcher
3)	znode有兩種類型
		a)臨時:當前session有效,不能有子節點的。
		b)永久:不依賴於session
4)	znode的四種形式
		PERSISTENT
		PERSISTENT_SEQUENTIAL	 帶順序編號的
		EPHEMERAL
		EPHEMERAL_SEQUENTIA

ZK節點數:奇數個(>=3)
選舉:leader+flower
ZK集羣的寫操作,leader負責,會把通知所有節點寫入操作
只有收到半數以上節點的成功反饋,纔算成功

2、基本操作

啓動ZK

[hadoop@vm01 bin]$ ./zkServer.sh start	

查看ZK狀態,單節點就是standalone,集羣是leader,flower

[hadoop@vm01 bin]$ ./zkServer.sh status

打開ZK客戶端

[hadoop@vm01 bin]$ ./zkCli.sh
[zk: localhost:2181(CONNECTED) 11] quit

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper, kafka]

ls2 可以理解爲 ls+stat

[zk: localhost:2181(CONNECTED) 1] ls2 /
[zookeeper, kafka]  #下面是ZK的狀態信息
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2

顯示當前狀態信息,

[zk: localhost:2181(CONNECTED) 2] stat /
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2

獲取

[zk: localhost:2181(CONNECTED) 3] get /zookeeper

cZxid = 0x0  #zk當前的id
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0  #修改後的id
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x0	 #最後跟新的子節點id
cversion = -1		#子節點版本號
dataVersion = 0		#數據版本
aclVersion = 0			#權限版本
ephemeralOwner = 0x0		#是否是臨時的
dataLength = 0	#數據長度
numChildren = 1		#有幾個孩子

create
[-s] #帶不帶編號
[-e] #臨時

[zk: localhost:2181(CONNECTED) 4] create /ruoze ruoze-data
Created /ruoze
[zk: localhost:2181(CONNECTED) 5] ls /
[ruoze, zookeeper, kafka]
[zk: localhost:2181(CONNECTED) 6] get /ruoze
ruoze-data  #數據
cZxid = 0xe7
ctime = Thu Aug 15 06:16:21 PDT 2019
mZxid = 0xe7
mtime = Thu Aug 15 06:16:21 PDT 2019
pZxid = 0xe7
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[zk: localhost:2181(CONNECTED) 7] create -e /ruoze/xiaoruoze  xiaoruoze
Created /ruoze/xiaoruoze
[zk: localhost:2181(CONNECTED) 8] get /ruoze
ruoze-data
cZxid = 0xe7
ctime = Thu Aug 15 06:16:21 PDT 2019
mZxid = 0xe7
mtime = Thu Aug 15 06:16:21 PDT 2019
pZxid = 0xe8
cversion = 1  
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 1  #有一個孩子了
[zk: localhost:2181(CONNECTED) 9] get /ruoze/xiaoruoze
xiaoruoze
cZxid = 0xe8
ctime = Thu Aug 15 06:18:09 PDT 2019
mZxid = 0xe8
mtime = Thu Aug 15 06:18:09 PDT 2019
pZxid = 0xe8
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x16c88e4a0770001 #表示是臨時節點
dataLength = 9
numChildren = 0
[zk: localhost:2181(CONNECTED) 10] quit
[hadoop@vm01 bin]$ ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /ruoze
[]  #發現沒有子節點了,這就是臨時的特點,退出就沒了

加編號,順序
分佈式鎖的一個實現,會藉助這個

[zk: localhost:2181(CONNECTED) 1] create -s /ruoze/seq seq
Created /ruoze/seq0000000001
[zk: localhost:2181(CONNECTED) 2] create -s /ruoze/seq seq
Created /ruoze/seq0000000002
[zk: localhost:2181(CONNECTED) 3] create -s /ruoze/seq seq
Created /ruoze/seq0000000003
[zk: localhost:2181(CONNECTED) 4] create -s /ruoze/seq seq
Created /ruoze/seq0000000004
[zk: localhost:2181(CONNECTED) 5] create -s /ruoze/seq seq
Created /ruoze/seq0000000005
[zk: localhost:2181(CONNECTED) 6] 
[zk: localhost:2181(CONNECTED) 6] ls /ruoze
[seq0000000005, seq0000000003, seq0000000004, seq0000000001, seq0000000002]

修改數據,查看版本信息

[zk: localhost:2181(CONNECTED) 7] get /ruoze
ruoze-data
cZxid = 0xe7
ctime = Thu Aug 15 06:16:21 PDT 2019
mZxid = 0xe7
mtime = Thu Aug 15 06:16:21 PDT 2019
pZxid = 0xef
cversion = 7
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 5

[zk: localhost:2181(CONNECTED) 8] set /ruoze www.ruozedata.com
cZxid = 0xe7
ctime = Thu Aug 15 06:16:21 PDT 2019
mZxid = 0xf0
mtime = Thu Aug 15 06:24:30 PDT 2019
pZxid = 0xef
cversion = 7
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 17
numChildren = 5
[zk: localhost:2181(CONNECTED) 9] get /ruoze
www.ruozedata.com
cZxid = 0xe7
ctime = Thu Aug 15 06:16:21 PDT 2019
mZxid = 0xf0
mtime = Thu Aug 15 06:24:30 PDT 2019
pZxid = 0xef
cversion = 7
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 17
numChildren = 5

刪除

[zk: localhost:2181(CONNECTED) 11] delete /ruoze/seq0000000001
[zk: localhost:2181(CONNECTED) 12] ls /ruoze
[seq0000000005, seq0000000003, seq0000000004, seq0000000002]

修改seq2的數據,然後刪除,帶版本的,0的版本是刪除不掉的,
因爲修改之後版本+1,必須用最新的版本號才能刪除
set,delete都可以帶上版本號,建議帶上版本號,相當於加了一個樂觀鎖

[zk: localhost:2181(CONNECTED) 14] set /ruoze/seq0000000002 seq2
[zk: localhost:2181(CONNECTED) 16] delete /ruoze/seq0000000002 0
version No is not valid : /ruoze/seq0000000002
[zk: localhost:2181(CONNECTED) 17] delete /ruoze/seq0000000002 1

3、ZK四字命令

[hadoop@vm01 bin]$ echo stat |nc localhost 2181
Zookeeper version: 3.4.5-cdh5.7.0--1, built on 03/23/2016 18:31 GMT
Clients:
 /0:0:0:0:0:0:0:1:50179[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/11
Received: 229
Sent: 228
Connections: 1  #有多少連接數
Outstanding: 0
Zxid: 0xf7
Mode: standalone
Node count: 146  #節點數量
[hadoop@vm01 bin]$ echo ruok |nc localhost 2181
imok

[hadoop@vm01 bin]$ echo dump |nc localhost 2181     
SessionTracker dump:
Session Sets (0):
ephemeral nodes dump:
Sessions with Ephemerals (0): #臨時節點有多少個

可以看到ZK的配置

[hadoop@vm01 bin]$ echo conf |nc localhost 2181    
clientPort=2181
dataDir=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/data/version-2
dataLogDir=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/dataLog/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0

[hadoop@vm01 bin]$ echo cons |nc localhost 2181 
 /0:0:0:0:0:0:0:1:50187[0](queued=0,recved=1,sent=0)

監控

 [hadoop@vm01 bin]$ echo mntr |nc localhost 2181    
zk_version      3.4.5-cdh5.7.0--1, built on 03/23/2016 18:31 GMT
zk_avg_latency  0
zk_max_latency  11
zk_min_latency  0
zk_packets_received     234
zk_packets_sent 233
zk_num_alive_connections        1
zk_outstanding_requests 0
zk_server_state standalone
zk_znode_count  146
zk_watch_count  0
zk_ephemerals_count     0
zk_approximate_data_size        11597
zk_open_file_descriptor_count   28
zk_max_file_descriptor_count    65536

查看有多少watcher

[zk: localhost:2181(CONNECTED) 1] get /ruoze watch  #加一把鎖
[hadoop@vm01 bin]$ echo wchs |nc localhost 2181
1 connections watching 1 paths
Total watches:1  #數量1個

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