前言
使用Zookeeper之前,先了解一下Zookeeper是啥?有什麼作用?
原理
Zookeeper本身是一種存儲數據的樹結構,結構和文件系統非常相似,區別是Zookeeper的節點都可以存值。
通過Zookeeper命令演示一下這個結構:
create /hubt -- 創建節點
ls / -- 查詢/節點下面的節點情況
stat /tao -- 查看節點的屬性
cZxid:這是導致創建znode更改的事務ID。
ctime:表示從1970-01-01T00:00:00Z開始以毫秒爲單位的znode創建時間。
mZxid:這是最後修改znode更改的事務ID。
mtime:表示從1970-01-01T00:00:00Z開始以毫秒爲單位的znode最近修改時間。
pZxid:這是用於添加或刪除子節點的znode更改的事務ID。
dataVersion:表示對該znode的數據所做的更改次數。
cversion:這表示對此znode的子節點進行的更改次數。
aclVersion:表示對此znode的ACL進行更改的次數。
ephemeralOwner:如果znode是臨時類型節點,則這是znode所有者的 session ID。 如果znode不是臨時節點,則該字段設置爲零。
dataLength:這是znode數據字段的長度。
numChildren:這表示znode的子節點的數量。
create /hubt/data 888 -- 創建節點並且存值
get /hubt/data -- 獲取節點上的值。
set /hubt/data 999 -- 修改節點的值
delete /hubt/data -- 刪除某個節點,節點下面不能有節點
deleteall /hubt -- 刪除節點/hubt 和節點下面的全部節點
創建順序節點
create -s /com_ -- 創建順序節點
create -e /tmp --創建臨時節點,退出連接節點就會消失,但是在沒有消失之前其他連接也是可以看到這個節點的
create -es /tmps -- 創建臨時順序節點
create -c /container -- 創建容器節點
容器節點裏面的的最後一個幾點刪除之後,會自動消失。
create -t 3000 /tt -- 創建過期節點,3000毫秒不操作就刪除。
該命令默認是關閉的,需要設置啓動參數才能打開。
zkServer.sh 啓動文件中加上下圖的紅色標註的話:
"-Dzookeeper.extendedTypesEnabled=true"
create -t 5000 -s /yy -- 創建順序過期節點
總結
zookeeper 的命令操作不多,比較簡單。節點類型有:
持久節點,所謂持久節點,是指在節點創建後,就一直存在,直到有刪除操作來主動清除這個節點。
臨時節點,和持久節點不同的是,臨時節點的生命週期和客戶端會話綁定。也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉。注意,這裏提到的是會話失效,而非連接斷開。另外,在臨時節點下面不能創建子節點。
持久順序節點,這類節點的基本特性和持久節點是一致的。額外的特性是,在ZK中,每個父節點會爲他的第一級子節點維護一份時序,會記錄每個子節點創建的先後順序。基於這個特性,在創建子節點的時候,可以設置這個屬性,那麼在創建節點過程中,ZK會自動爲給定節點名加上一個數字後綴,作爲新的節點名。這個數字後綴的範圍是整型的最大值。
臨時順序節點,類似臨時節點和順序節點
容器節點:容器節點下面的節點被刪除完,容器節點自動刪除。
容器順序節點:容器節點增加了順序功能。