文章目錄
- 前言
- 一、單機模式部署
- 架構圖
- 部署流程:
- 二、zkCli.sh命令行工具基礎操作
- 三、ACL權限控制實踐
- 學習資源
前言
本文是Zookeeper學習系列的第四篇,將詳細講解Zookeeper的單機模式部署過程以及基礎命令行操作,包括節點管理、Watcher機制和ACL權限控制。
一、單機模式部署
架構圖
架構圖說明:
- 客戶端連接(藍色部分)
- 客戶端應用:使用Zookeeper的應用程序
- zkCli.sh:官方命令行工具
- SDK:各種語言客戶端庫
- 均通過TCP協議連接到Zookeeper服務端(默認端口2181)
- Zookeeper服務端(綠色部分)
- 請求處理器:處理客戶端請求的組件
- 內存數據庫:存儲所有ZNode節點數據(DataTree)
- 核心工作流程:
客戶端請求 → 請求處理器 → 更新內存數據庫 → 寫入事務日志
- 本地存儲(紫色部分)
- 事務日志:所有寫操作的順序記錄(保證持久性)
- 快照文件:內存數據庫的定期序列化(加速恢復)
- 配置文件:zoo.cfg中的核心配置項:
dataDir=/tmp/zookeeper/data # 數據存儲目錄
clientPort=2181 # 客戶端連接端口
部署流程:
1. 下載Zookeeper發行版
首先訪問Apache Zookeeper官網下載最新穩定版。以3.8.0版本為例:
# 下載發行版
wget https://downloads.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz# 解壓文件
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz# 進入目錄
cd apache-zookeeper-3.8.0-bin
2. 修改基礎配置文件
Zookeeper的配置文件位于conf/zoo_sample.cfg,我們需要復制并修改它:
cp conf/zoo_sample.cfg conf/zoo.cfg
編輯conf/zoo.cfg文件,重點關注以下兩個參數:
# 數據存儲目錄(需要手動創建)
dataDir=/tmp/zookeeper/data# 客戶端連接端口
clientPort=2181# 其他保持默認配置
tickTime=2000
initLimit=5
syncLimit=2
創建數據目錄:
mkdir -p /tmp/zookeeper/data
3. 啟動服務端和客戶端
啟動Zookeeper服務:
# 啟動服務端
bin/zkServer.sh start# 查看服務狀態
bin/zkServer.sh status
啟動客戶端連接:
bin/zkCli.sh -server 127.0.0.1:2181
二、zkCli.sh命令行工具基礎操作
1. 基本節點操作
在客戶端命令行中執行以下操作:
# 創建持久節點
[zk: localhost:2181(CONNECTED) 0] create /first_node "Hello Zookeeper"
Created /first_node# 獲取節點數據
[zk: localhost:2181(CONNECTED) 1] get /first_node
Hello Zookeeper# 修改節點數據
[zk: localhost:2181(CONNECTED) 2] set /first_node "Updated data"# 列出節點
[zk: localhost:2181(CONNECTED) 3] ls /
[first_node, zookeeper]# 刪除節點(只能刪除無子節點的節點)
[zk: localhost:2181(CONNECTED) 4] delete /first_node
2. 節點類型實驗
Zookeeper支持多種節點類型:
# 創建臨時節點(會話結束自動刪除)
[zk: localhost:2181(CONNECTED) 5] create -e /ephemeral_node "Temp data"# 創建順序節點(自動追加序號)
[zk: localhost:2181(CONNECTED) 6] create -s /sequential_node "Seq data"
Created /sequential_node0000000001# 創建臨時順序節點(會話結束自動刪除)
[zk: localhost:2181(CONNECTED) 7] create -e -s /ephemeral_seq_node "Both"
Created /ephemeral_seq_node0000000002
3. Watcher機制實踐
Watcher是Zookeeper的核心特性,用于監聽節點變化:
# 在會話1中注冊監聽
[zk: localhost:2181(CONNECTED) 8] create /watch_node "Initial"
[zk: localhost:2181(CONNECTED) 9] get -w /watch_node# 在會話2中修改節點
[zk: localhost:2181(CONNECTED) 0] set /watch_node "Changed"# 會話1將收到通知:
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node
同樣可以監聽子節點變化:
# 注冊子節點監聽
ls -w /parent_node# 當創建/刪除子節點時會收到通知
4. 理解stat命令
stat命令提供節點的元數據信息:
[zk: localhost:2181(CONNECTED) 10] create /stat_demo "data"
[zk: localhost:2181(CONNECTED) 11] stat /stat_democZxid = 0x2f # 創建事務ID
ctime = Mon Jul 21 15:30:00 CST 2025 # 創建時間
mZxid = 0x2f # 最后修改事務ID
mtime = Mon Jul 21 15:30:00 CST 2025 # 最后修改時間
pZxid = 0x2f # 最后子節點變更事務ID
cversion = 0 # 子節點版本號
dataVersion = 0 # 數據版本號(每次修改+1)
aclVersion = 0 # ACL版本號
ephemeralOwner = 0x0 # 臨時節點所有者(0表示持久節點)
dataLength = 4 # 數據長度
numChildren = 0 # 子節點數量
三、ACL權限控制實踐
Zookeeper通過ACL(Access Control Lists)實現節點權限控制:
# 1. 創建帶ACL的節點(world:anyone只有讀權限)
create /protected_node "sensitive" world:anyone:r# 2. 嘗試修改(將失敗)
set /protected_node "new data"
Authentication is not valid : /protected_node# 3. 添加認證信息
addauth digest user1:password1# 4. 設置ACL(digest模式)
setAcl /protected_node digest:user1:password1:crwda# 5. 現在可以操作節點了
set /protected_node "updated data"# 6. 查看ACL
getAcl /protected_node
ACL權限說明:
- c:CREATE(創建子節點)
- r:READ(讀取節點數據)
- w:WRITE(修改節點數據)
- -d:DELETE(刪除子節點)
- a:ADMIN(設置ACL)
學習資源
- Zookeeper官方文檔
- Zookeeper ACL詳解