zookeeper基本特性及linux客戶端操作
阿新 • • 發佈:2019-01-30
1. session的基本原理
- 客戶端與服務端之間的連線存在會話
- 每個會話都會可以設定一個超時時間
心跳結束,session過期
session過期,則臨時節點znode會被拋棄
- 心跳機制:客戶端向服務端的ping包請求
2. zk常用命令列操作
- 通過./zkCli.sh開啟zk的客戶端進行命令列後臺
cd /usr/local/zookeeper/bin //導航到zk的bin目錄
./zkCli.sh //啟動zk客戶端
- ls與ls2命令
ls命令查詢當前節點下的子節點
ls2命令是查詢當前節點的所有資訊,是ls+stat命令的組合效果
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 2] ls2 /
[zookeeper]
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 3]
- get與stat命令
stat命令查詢當前節點資訊
[zk: localhost:2181(CONNECTED) 3] stat /
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
get命令
[zk: localhost:2181(CONNECTED) 4] get /
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
create [-s] [-e] path data acl 建立節點
set path data [vsersion] 更新節點資料
delete path [version] 刪除節點
3. zk特性-watcher機制
- 針對每個節點的操作,都會有一個監督者-> wathcer
- 當監控的某個物件(znode)發生了變化,則觸發watcher事件
- zk中的watcher是一次性的,觸發後立即銷燬
- 父節點,子節點 增刪改都能夠觸發其watcher
- 針對不同型別的操作,觸發的watcher事件也不同。(子)節點建立事件,(子)節點刪除事件,(子)節點資料變化事件
3.1 Watcher命令列學習
- 通過get path [watch]設定watcher
- 父節點增刪改操作觸發watcher
- 子節點增刪改操作觸發watcher
3.2 Watcher事件型別
- 建立父節點觸發:NodeCreated
- 修改父節點資料觸發:NodeDataChanged
- 刪除父節點觸發:NodeDeleted
- ls為父節點設定watcher,建立子節點觸發:NodeChildrenChanged
- ls為父節點設定watcher,刪除子節點觸發:NodeChildrenChanged
- ls為父節點設定watcher,修改子節點不觸發事件
3.3 watcher使用場景
- 統一資源配置
4. ACL(access control lists)許可權控制
- 針對節點可以設定相關讀寫等許可權,目的為了保障資料安全性
- 許可權permissions可以指定不同的許可權範圍以及角色
4.1 ACL命令列
- getAcl:獲取某個節點的ACL許可權資訊
- setAcl:置某個節點的ACL許可權資訊
- addauth:輸入認證授權資訊,註冊時輸入明文密碼(登入)但是在zk的系統裡,密碼是以加密的形式存在的
4.2 ACL的構成
- zk的acl通過[scheme:id:permissions]來構成許可權列表
scheme:代表採用的某種許可權機制
id:代表允許訪問的使用者
permissions:許可權組合字串
4.2.1 scheme
- world:world下只有一個id,即只有一個使用者,也就是anyone,那麼組合的寫法就是world:anyone:[permissions]
- auth:代表認證登入,需要註冊使用者有許可權就可以,形式為auth:user:password:[permissions]
- digest:需要對密碼加密才能訪問,組合形式為digest:username:BASE64(SHA1(password)):[permissions]
- 簡而言之,auth與digest的區別就是,前者明文,後者密文setAcl /path auth:lee:lee:cdrwa 與setAcl /path digest:lee:BASE64(SHA1(password))cdrwa是等價的,在通過addauth digest lee:lee後都能操作指定節點的許可權
- ip:當設定為ip指定的ip地址,此時限制ip進行訪問,比如ip:192.168.1.1:[permissions]
- super:代表超級管理員,擁有所有的許可權
4.2.2 permissions
許可權字串縮寫crdwa
- CREATE:建立子節點
- READ:獲取節點/子節點
- WRITE:設定節點資料
- DELETE:刪除子節點
- ADMIN:設定許可權
4.3 ACL命令列
- world:anyone:cdrwa
- auth:user:pwd:cdrwa
- digest:user:BASE64(SHA1(pwd)):cdrwa
- addauth digest user:pwd
- ip:192.168.1.1:cdrwa
- super
1. 修改zkServer.sh增加super管理員
2. 重啟zkServer.sh
4.4 ACL的常用使用場景
- 開發/測試環境分離,開發者無權操作測試庫的節點,只能看
- 生產環境上控制指定ip的服務可以訪問相關節點,防止混亂
5. zk四字命令 Four Letter Worlds
- zk可以通過它自身提供的簡寫命令來和伺服器進行互動
- 需要使用到nc命令,安裝:yum install nc
- echo [commond] | nc [ip] [port]
5.1 zookeeper四字命令
- [stat] 檢視zk的狀態資訊,以及是否mode
- [ruok] 檢視當前zkServer是否啟動,返回imok
- [dump] 列出未經處理的會話和臨時節點
- [conf] 檢視伺服器配置
- [cons] 展示連線到伺服器的客戶端資訊
- [envi] 環境變數
- [mntr] 監控zk健康資訊
- [wchs] 展示watch的資訊
- [wchc]與[wchp] session與watch及path與watch資訊