8.4.4.Zookeeper結構和命令
1. Zookeeper結構
1.1.ZooKeeper數據模型Znode
ZooKeeper擁有一個層次化的目錄結構,命名符合常規文件系統規範
ZooKeeper樹中的每個節點被稱為—Znode。和文件系統的目錄樹一樣,ZooKeeper樹中的每個節點可以擁有子節點,並且其有一個唯一的路徑標識
節點Znode可以包含數據和子節點(但是EPHEMERAL類型的節點不能有子節點)
客戶端應用可以在節點上設置監視器
2. Zookeeper命令行客戶端操作
啟動Zookeeper服務之後,輸入以下命令,連接到Zookeeper服務:zkCli.sh -server localhost:2183(連接到自己的zookeeper服務)
zkCli.sh -server shizhan2:2183(連接到其他的zookeeper服務)
連接成功之後,系統會輸出Zookeeper的相關環境及配置信息,並在屏幕輸出“welcome to Zookeeper!”等信息。輸入help之後,屏幕
會輸出可用的Zookeeper命令,如下圖所示
輸入connect zhizhan2:2183可以連接到其他zookeeper服務(默認端口是2181,我修改為2183了)
2.1 使用Zookeeper命令的簡單操作步驟
(1) 使用ls命令查看當前Zookeeper中所包含的內容:ls /
[zk: localhost:2183(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2183(CONNECTED) 2]
(2) 創建一個新的Znode節點"zk",以及與它關聯的字符串,執行命令:create /zk "myData"(默認持久節點)
[zk: localhost:2183(CONNECTED) 2] create /zk "myData"
Created /zk
(3) 再次使用ls命令來查看現在Zookeeper的中所包含的內容:ls /
[zk: localhost:2183(CONNECTED) 3] ls / [zk, zookeeper]
(4) 使用get命令來確認第二步中所創建的Znode是否包含我們創建的字符串,執行命令:get /zk
[zk: localhost:2183(CONNECTED) 4] get /zk
"myData"
cZxid = 0x100000008
ctime = Tue Jun 05 19:02:42 CST 2018
mZxid = 0x100000008
mtime = Tue Jun 05 19:02:42 CST 2018
pZxid = 0x100000008
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
#監聽這個節點的數據變化,當另外一個客戶端改變/zk時,它會打出下面的
[zk: localhost:2181(CONNECTED) 4] get /zk watch
#WATCHER::
#WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk
(5) 接下來通過set命令來對zk所關聯的字符串進行設置,執行命令:set /zk "zb"
[zk: localhost:2183(CONNECTED) 5] set /zk "zb"
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000007
mtime = Fri Oct 17 03:55:50 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
(7) 下面我們將剛才創建的Znode刪除,執行命令:delete /zk
[zk: localhost:2183(CONNECTED) 7] delete /zk
(8)刪除節點:rmr(效果同上),執行命令:rmr /zk
[zk: localhost:2183(CONNECTED) 7] rmr /zk
ZooKeeper節點屬性
通過前面的介紹,我們可以了解到,一個節點自身擁有表示其狀態的許多重要屬性,如下圖所示。
ZooKeeper節點類型
1、Znode有兩種類型:
臨時節點(ephemeral)(斷開連接自己刪除)該節點的生命周期依賴於創建它們的會話。一旦會話(Session)結束,臨時節點將被自動刪除,當然可以也
可以手動刪除。雖然每個臨時的Znode都會綁定到一個客戶端會話,但他們對所有的客戶端還是可見的。另外,ZooKeeper的臨時節點不允許擁有子節點。
持久節點(persistent)(斷開連接不刪除)該節點的生命周期不依賴於會話,並且只有在客戶端顯示執行刪除操作的時候,他們才能被刪除。
2.2 Zookeeper的api的簡單使用
Zookeeper API共包含五個包,分別為:
(1)org.apache.zookeeper (2)org.apache.zookeeper.data (3)org.apache.zookeeper.server (4)org.apache.zookeeper.server.quorum (5)org.apache.zookeeper.server.upgrade
org.apache.zookeeper.Zookeeper 是客戶端入口主類,負責建立與server的會話
如果要使用Zookeeper服務,應用程序首先必須創建一個Zookeeper實例,這時就需要使用此類。一旦客戶端和Zookeeper服務建立起了連接,
Zookeeper系統將會給次連接會話分配一個ID值,並且客戶端將會周期性的向服務器端發送心跳來維持會話連接。只要連接有效,客戶端就可以使
用Zookeeper API來做相應處理了
Zookeeper類提供了如下圖所示的幾類主要方法:
功能 |
描述 |
create |
在本地目錄樹中創建一個節點 |
delete |
刪除一個節點 |
exists |
測試本地是否存在目標節點 |
get/set data |
從目標節點上讀取 / 寫數據 |
get/set ACL |
獲取 / 設置目標節點訪問控制列表信息 |
get children |
檢索一個子節點上的列表 |
sync |
等待要被傳送的數據 |
2.3 Zookeeper API的使用(Demo增刪改查程序)
8.4.4.Zookeeper結構和命令