Zookeeper命令操作實踐篇,包含創建節點,節點權限設置

本文講解了zk的節點類型、zk的常用命令包含acl權限方面的。

Zookeeper節點類型

Zookeeper命令操作實踐篇,包含創建節點,節點權限設置

1、Znode 有兩種類型:

臨時(ephemeral)(create -e /app1/test1 “test1” 客戶端斷開連接, zk 將刪除 ephemeral 類型節點)

持久(persistent) (create -s /app1/test2 “test2” 客戶端斷開連接 zk 不刪除 persistent 類型節點)

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

PERSISTENT持久、PERSISTENT_SEQUENTIAL(持久序列/test20000000001 )、EPHEMERAL臨時、EPHEMERAL_SEQUENTIAL臨時序列

3、創建 znode 時設置順序標識,znode 名稱後會附加一個值,順序號是一個單調遞增的計數器,由父節點維護

4、在分佈式系統中,順序號可以被用於為所有的事件進行全局排序,這樣客戶端可以通過順序號推斷事件的順序

Zookeeper命令操作實踐篇,包含創建節點,節點權限設置

創建節點命令

注:app1節點必須是持久節點,臨時節點無法創建子節點,臨時節點創建子節點會報:<strong>Ephemerals cannot have children: /app1/test1


Zookeeper 節點狀態屬性

Zookeeper命令操作實踐篇,包含創建節點,節點權限設置

Zookeeper命令操作實踐篇,包含創建節點,節點權限設置

服務端常用命令

啟動 ZK 服務: sh bin/zkServer.sh start

查看 ZK 服務狀態: sh bin/zkServer.sh status

停止 ZK 服務: sh bin/zkServer.sh stop

重啟 ZK 服務: sh bin/zkServer.sh restar

客戶端常用命令

使用 zkCli.sh -server 127.0.0.1:2181 連接到 ZooKeeper 服務,連接成功後,系統會輸出 ZooKeeper 的相關環境以及配置信息。 命令行工具的一些簡單操作如下:

 顯示根目錄下、文件: ls / 使用 ls 命令來查看當前 ZooKeeper 中所包含的內容

 顯示根目錄下、文件: ls2 / 查看當前節點數據並能看到更新次數等數據

 創建文件,並設置初始內容: create /zk "test" 創建一個新的 znode 節點“ zk ”以及與它關聯的字符串 [-e] [-s] 【-e 臨時節點】 【-s 順序節點】

 獲取文件內容:get /zk 確認 znode 是否包含我們所創建的字符串 [watch] 【watch 監聽】

 修改文件內容: set /zk "zkbak" 對 zk 所關聯的字符串進行設置

 刪除文件: delete /zk 將剛才創建的 znode 刪除,如果存在子節點刪除失敗

 遞歸刪除:rmr /zk 或者 deleteall /zk將剛才創建的 znode 刪除,子節點同時刪除,推薦使用deleteall

 退出客戶端: quit

 幫助命令: help


Zookeeper命令操作實踐篇,包含創建節點,節點權限設置

Zookeeper命令操作實踐篇,包含創建節點,節點權限設置

help命令


ACL保障數據的安全(先了解本篇不做重點講)

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

zookeeper 提供瞭如下幾種機制(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。

Permission:

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

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

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

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

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

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

ACL 命令

getAcl /app1/testAcl 獲取節點acl權限信息

setAcl /app1/testAcl world:anyone:crwa # 設置該節點的 acl 權限

getAcl /app1/testAcl # 獲取該節點的 acl 權限信息,成功後,該節點就少了 d 權限

create /app1/testAcl/xyz xyz-data # 創建子節點

delete /app1/testAcl/xyz # 由於沒有 d 權限,所以提示無法刪除

addauth digest user1:123456 # 需要先添加一個用戶

setAcl /app1/testAcl auth:user1:123456:crwa # 然後才可以拿著這個用戶去設置權限

getAcl /app1/testAcl # 密碼是以密文的形式存儲的

create /app1/testAcl/testa aaa

delete /app1/testAcl/testa # 由於沒有 d 權限,所以提示無法刪除

退出客戶端後:

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

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

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

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

create /app1/testDigest data

addauth digest user1:123456

setAcl /app1/testDigest digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa # 使用 digest來設置權限

注意:這裡如果使用明文,會導致該 znode 不可訪問

通過明文獲得密文

shell>

java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar

org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456

deer:123456->deer:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=


create /app1/testIp data

setAcl /app1/testIp ip:192.168.30.10:cdrwa

getAcl /app1/testIp


Zookeeper命令操作實踐篇,包含創建節點,節點權限設置


分享到:


相關文章: