Docker安裝Zookeeper
下載並運行
$ docker search zookeeper # 查看一下鏡像
$ docker pull zookeeper:3.4.9 # 拉取指定版本zk鏡像
$ docker images # 查看image ID
$ mkdir -p /root/docker/zookeeper/data
$ docker run -d -p 2181:2181 -v /root/docker/zookeeper/data:/data/ --name zookeeper --privileged 3b83d9104a4c # 最后跟着 image ID
進入容器
$ docker ps # 查看zookeeper的CONTAINER ID
$ docker exec -it CONTAINERID /bin/bash # 后台進入容器
連接ZooKeeper 服務
$ cd bin # 進入bin目錄
$ ./zkCli.sh
設置防火牆
關於防火牆,你可以關閉它,或者開啟2181端口:
【查看防火牆是否開啟】
$ systemctl status firewalld
【開啟或關閉防火牆】
$ systemctl start firewalld
$ systemctl stop firewalld
【查看所有開啟的端口】
$ firewall-cmd --list-ports
【開啟80端口】
$ firewall-cmd --zone=public --add-port=2181/tcp --permanent
【重啟防火牆,使其生效】
$ firewall-cmd --reload
配置阿里雲安全組
來到實例管理頁面,點擊更多,點擊網絡和安全組,點擊安全組配置。
點擊配置規則。
點擊添加安全組規則
使用Zookeeper圖形化客戶端工具連接
下載地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
解壓壓縮包,進入jar包所在目錄,執行命令:
$ java -jar xxx.jar
左上角按鈕表示登錄,主機地址和端口號:你的服務器ip:2181
Docker常用命令演示
查看常用命令help
[zk: localhost:2181(CONNECTED) 0] help
創建節點create
通過 create
命令在根目錄創建了 node1 節點,與它關聯的字符串是"node1"
[zk: localhost:2181(CONNECTED) 0] create /node1 "node1"
通過 create
命令在根目錄創建了 /node1/node1.1 節點,與它關聯的內容是數字 123
[zk: localhost:2181(CONNECTED) 0] create /node1/node1.1 123
設置節點數據內容set
設置/node1節點的數據內容為"new node!",此時相當於更新操作。
[zk: localhost:2181(CONNECTED) 0] set /node1 "new node!"
獲取節點的數據get
get
命令可以獲取指定節點的數據內容和節點的狀態,可以看出我們通過 set
命令已經將節點數據內容改為 "new node!"。
[zk: localhost:2181(CONNECTED) 0] get /node1 #"new node!"
cZxid = 0xb
ctime = Fri Nov 20 09:36:43 GMT 2020
mZxid = 0xd
mtime = Fri Nov 20 09:43:25 GMT 2020
pZxid = 0x10
cversion = 2
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
下面的一些字段信息,將在本篇第三節znode結構中介紹。
查看某個目錄的子節點ls
查看根目錄下的子節點
[zk: localhost:2181(CONNECTED) 0] ls /
[node2, zookeeper, node1]
查看/node1目錄下的子節點
[zk: localhost:2181(CONNECTED) 0] ls /node1
[node1.1]
查看節點狀態stat
[zk: localhost:2181(CONNECTED) 0] stat /node1
cZxid = 0xb
ctime = Fri Nov 20 09:36:43 GMT 2020
mZxid = 0xd
mtime = Fri Nov 20 09:43:25 GMT 2020
pZxid = 0xc
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 1
查看節點信息和狀態ls2
ls2 = ls + stat
[zk: localhost:2181(CONNECTED) 0] ls2 /node1
[node1.1]
cZxid = 0xb
ctime = Fri Nov 20 09:36:43 GMT 2020
mZxid = 0xd
mtime = Fri Nov 20 09:43:25 GMT 2020
pZxid = 0xc
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 1
刪除節點delete
刪除某一個節點,這個節點必須無子節點。
[zk: localhost:2181(CONNECTED) 10] delete /node1
Node not empty: /node1
[zk: localhost:2181(CONNECTED) 11] delete /node1/node1.1
[zk: localhost:2181(CONNECTED) 12] get /node1/node1.1
Node does not exist: /node1/node1.1
znode結構
znode 狀態信息 | 解釋 |
---|---|
cZxid | create ZXID,即該數據節點被創建時的事務 id |
ctime | create time,即該節點的創建時間 |
mZxid | modified ZXID,即該節點最終一次更新時的事務 id |
mtime | modified time,即該節點最后一次的更新時間 |
pZxid | 該節點的子節點列表最后一次修改時的事務 id,只有子節點列表變更才會更新 pZxid,子節點內容變更不會更新 |
cversion | 子節點版本號,當前節點的子節點每次變化時值增加 1 |
dataVersion | 數據節點內容版本號,節點創建時為 0,每更新一次節點內容(不管內容有無變化)該版本號的值增加 1 |
aclVersion | 節點的 ACL 版本號,表示該節點 ACL 信息變更次數 |
ephemeralOwner | 創建該臨時節點的會話的 sessionId;如果當前節點為持久節點,則 ephemeralOwner=0 |
dataLength | 數據節點內容長度 |
numChildren | 當前節點的子節點個數 |