Zookeeper快速入門


 

 

Zookeeper快速入門

 

一、安裝

  1. 安裝

 環境要求:必須要有jdk環境

   從官網https://archive.apache.org/dist/zookeeper/下載最新的版本,如:zookeeper-3.4.9.tar.gz

如果是windows,解壓即可;
如果是linux運行tar –zxvf zookeeper-3.4.9.tar.gz ,解壓。

解壓之后如下:

 

  1. 配置

需將conf/ zoo_sample.cfg  復制一份名為zoo.cfg的配置文件。其中重要的幾項配置:

clientPort=2181       端口

dataDir=D:/logs/zookeeper/data   快照存放位置

dataLogDir=D:/logs/zookeeper/log         日志存放位置

snapCount=3   執行多少次事物就生成快照文件

 

  1. 運行服務端

如果是windows ,雙擊zkServer.cmd

如果是linux,運行sh zkServer.sh

看到如下就代表成功

 

 

或者通過jps查看,如果有QuorumPeerMain就代表成功

 

 

  1. 客戶端連接服務端

 

如果是windows ,雙擊zkCli.cmd,或者在命令窗口運行 zkCli.cmd  -server ip:port

其中ip:port 為服務端的ip和端口,如127.0.0.1:2181

如果是linux,運行sh zkCli.sh  -server ip:port

 

 

二、使用

創建節點

create /node1 v1    (其中node1為節點名稱,v1為節點的值)

 

 

 

修改節點

set /node1 v11  (其中node1為節點名稱,v11為需要修改節點的值)

 

 

刪除節點

delete /node2    (其中node2為節點名稱)

 

 

如果/node1下面有子節點,那么會報錯,需要使用rmr /node1命令

 

 

查看節點

get /node1    (其中node1為節點名稱)

 

 

說明:

如上的操作不帶參數默認都是持久節點。

 

三、節點類型:

1.Zookeeper中有兩種節點類型:

持久節點persitent

create /node1 v1,客戶端斷開連接之后,zk不刪除persitent節點

 

臨時節點ephemeral

create  -e /node1 v1 ,客戶端斷開連接之后,zk刪除ephemeral節點

 

2.zookeeper有四種形式的目錄節點(默認是persistent)

PERSISTENT 

create /node1 v1

PERSISTENT_sequence

create  -s /node1 v1

實際上創建了一個新的名稱為node10000000001的節點。再次執行會生成一個新的名稱為node10000000002的節點

 

EPHEMERAL

create  -e /node1 v1  當客戶端退出之后,改節點就被刪除了

注意,臨時節點下面不能創建子節點,會報錯:

 

 

 

EPHEMERAL_sequence

create  -e -s /node1 v1  當客戶端退出之后,改節點就被刪除了。

 

3.節點狀態屬性

cZxid :節點被創建的事物id值  c:create

ctime :節點被創建的時間

mZxid :節點被修改的事物的事物id值 m:modify

mtime :節點被修改的時間

pZxid :子節點最后一次唄修改的事物id

cversion :節點的子節點被修改的版本號

dataVersion :數據被修改的版本號

aclVersion : 節點的acl被修改的版本號

ephemeralOwner :如果是持久節點值為0,臨時節點非0

dataLength : 節點值得長度

numChildren :子節點個數

 

如下為持久節點的值:

[zk: localhost:2181(CONNECTED) 11] get /node1

v11

cZxid = 0x13

ctime = Mon Oct 29 10:07:58 CST 2018

mZxid = 0x14

mtime = Mon Oct 29 10:08:39 CST 2018

pZxid = 0x13

cversion = 0

dataVersion = 1

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 3

numChildren = 0

 

如下為臨時節點的值:

[zk: localhost:2181(CONNECTED) 12] get /node2

v2

cZxid = 0x29

ctime = Mon Oct 29 10:28:13 CST 2018

mZxid = 0x29

mtime = Mon Oct 29 10:28:13 CST 2018

pZxid = 0x29

cversion = 0

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x1000efbbe700001

dataLength = 2

numChildren = 0

 

四、zookeeper的ACL

 

4.1ACL機制

ACL(Access Control List)機制,表示為scheme:id:permissions,第一個字段表示采用哪一種機制,第二個id表示用戶,permissions表示相關權限(如只讀,讀寫,管理等)。

 

Scheme:

world: 它下面只有一個id, 叫anyone, world:anyone代表任何人,zookeeper中對所有人有權限的結點就是屬於world:anyone的

auth: 它不需要id, 只要是通過authentication的user都有權限(zookeeper支持通過kerberos來進行authencation, 也支持username/password形式的authentication)

digest: 它對應的id為username:BASE64(SHA1(password)),它需要先通過username:password形式的authentication

ip: 它對應的id為客戶機的IP地址,設置的時候可以設置一個ip段,比如ip:192.168.1.0/16, 表示匹配前16個bit的IP段

 

id:

id是驗證模式,不同的scheme,id值不一樣
scheme為auth時:username:password

scheme為digest時:username:BASE64(SHA1(password))

scheme為ip時:客戶端的ip地址。

scheme為world時:anyone。

 

permiddsion:

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、刪、改、查、管理權限,這5種權限簡寫為crwda(即:每個單詞的首字符縮寫)

CREATE(c):創建子節點的權限

DELETE(d):刪除節點的權限

READ(r):讀取節點數據的權限

WRITE(w):修改節點數據的權限

ADMIN(a):設置子節點權限的權限

 

 

4.2ACL的命令:

4.2.1getAcl

create /node1 v1  # 創建一個子節點

getAcl /node1     # 獲取該節點的acl權限信息

 

 

4.2.2setAcl

setAcl /node1 world:anyone:craw  把刪除權限d去除 ,那么在node1下面創建的子節點是不能被刪除的,但是/node1本身這個節點還是可以被刪除的。

 

 

4.2.3addauth:注冊會話授權信息(相當於創建用戶或者切換用戶)

 

4.2.3.1  auth

addauth digest u1:123456       新增用戶,名為u1,密碼為123456

setAcl /node3 auth:u1:123456:crdwa  給node3節點設置Acl ,scheme為auth類型,id 為auth類型即 u1:123456   ,permission為crdwa

 

 

退出本次客戶端后:

再次重新連接客戶端  (或者新啟動一個客戶端)

ls /node3/testAcl  #沒有權限無法訪問

create /node3/testAcl/testb bbb #沒有權限無法訪問

addauth digest user1:123456  # 重新新增權限后可以訪問了

 

 

如果忘記密碼那就沒辦法了,查看不了

 

4.2.3.1  digest

auth與digest的區別就是,前者使用明文密碼進行登錄,后者使用密文密碼進行登錄

create /node3/testDigest  dd

addauth digest u2:654321

setAcl /node3/testDigest digest:u2:Fqb0cTcVtn704lhrUTPitrq88fg=:ca   # 使用digest來設置權限

 

 

 

其中:addauth digest u2:654321 ,怎么查看加密的密碼呢

通過執行如下java命令可獲得:

java -Djava.ext.dirs=D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\lib -cp D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\zookeeper-3.4.13.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider u2:654321

 

 

五、常用四字命令

 

ZooKeeper 支持某些特定的四字命令字母與其的交互。它們大多是查詢命令,用來獲取 ZooKeeper 服務的當前狀態及相關信息。用戶在客戶端可以通過 telnet 或 nc 向 ZooKeeper 提交相應的命令

 

echo stat|nc 127.0.0.1 2181 來查看哪個節點被選擇作為follower或者leader 

使用echo ruok|nc 127.0.0.1 2181 測試是否啟動了該Server,若回復imok表示已經啟動。  

echo dump| nc 127.0.0.1 2181 ,列出未經處理的會話和臨時節點。  

echo kill | nc 127.0.0.1 2181 ,關掉server  

echo conf | nc 127.0.0.1 2181 ,輸出相關服務配置的詳細信息。  

echo cons | nc 127.0.0.1 2181 ,列出所有連接到服務器的客戶端的完全的連接 / 會話的詳細信息  

echo envi |nc 127.0.0.1 2181 ,輸出關於服務環境的詳細信息(區別於 conf 命令)。  

echo reqs | nc 127.0.0.1 2181 ,列出未經處理的請求。  

echo wchs | nc 127.0.0.1 2181 ,列出服務器 watch 的詳細信息。  

echo wchc | nc 127.0.0.1 2181 ,通過 session 列出服務器 watch 的詳細信息,它的輸出是一個與 watch 相關的會話的列表。  

echo wchp | nc 127.0.0.1 2181 ,通過路徑列出服務器 watch 的詳細信息。它輸出一個與 session 相關的路徑

 

5.1通過nc向zookeeper提交命令:

注意:需要安裝nc否則會報錯:

 

 

Linux(centos)安裝命令:yum –y install nc

Windows安裝netcat: 下載鏈接https://eternallybored.org/misc/netcat/

 

 

 

5.2通過telnet向zookeeper提交命令

首先要執行telnet 127.0.0.1 2181

 

連接成功之后,輸入四字命令,如:stat

 

 

 

六、查看快照或日志文件

 

直接打開快照或日志文件時亂碼,可用如下命令查看

 

在linux中執行:

java -cp /usr/local/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.jar:/usr/local/zookeeper/zookeeper-3.4.8/lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.LogFormatter log.11089bb

 

java -cp /usr/local/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.jar:/usr/local/zookeeper/zookeeper-3.4.8/lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter snapshot.ffd9b6

 

注意:java cp 命令在windows中執行分隔符為;而在linux為:

java cp 命令:

-cp 和 -classpath 一樣,是指定類運行所依賴其他類的路徑,通常是類庫,jar包之類,需要全路徑到jar包,window上分號“;”分隔,linux上是分號“:”分隔

 

 

java -cp D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\zookeeper-3.4.13.jar;D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\lib\slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter D:\logs\zookeeper\data\version-2\snapshot.1a

 

 

java -cp D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\zookeeper-3.4.13.jar;D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\lib\slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter D:\logs\zookeeper\log\version-2\log.1

 

 

 

七、zookeeper信息查看工具

下載地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

 

輸入ip,端口

 

 

查看如下,代表鏈接成功

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM