1. 程式人生 > >zookeeper基本特性及linux客戶端操作

zookeeper基本特性及linux客戶端操作

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事件型別

  1. 建立父節點觸發:NodeCreated
  2. 修改父節點資料觸發:NodeDataChanged
  3. 刪除父節點觸發:NodeDeleted
  4. ls為父節點設定watcher,建立子節點觸發:NodeChildrenChanged
  5. ls為父節點設定watcher,刪除子節點觸發:NodeChildrenChanged
  6. 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資訊