一、zookeeper /ˈzuːkiːpə(r)/ 介紹
它是一個分布式服務框架,是Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。ZooKeeper包含一個簡單的原語集,提供Java和C的接口。
簡單來說 zookeeper=文件系統+監聽通知機制
1、Znode節點(不可能會重名)
1.1 什么是節點
代表一個服務的名稱,就是服務實例描述的抽象。
2.1 Znode
znode 是一個跟 Unix 文件系統路徑相似的節點,可以往這個節點存儲 或獲取數據。 Zookeeper 底層是一套數據結構。這個存儲結構是一個樹形結構,其上的每一個節點, 我們稱之為“znode” zookeeper 中的數據是按照“樹”結構進行存儲的。而且 znode 節點還分為 4 中不同的類 型。 每一個 znode 默認能夠存儲 1MB 的數據(對於記錄狀態性質的數據來說,夠了) 可以使用 zkCli 命令,登錄到 zookeeper 上,並通過 ls、create、delete、get、set 等命令 操作這些 znode 節點.
(節點路徑 key) ,節點數據 (value)
key == / + key名稱
value== 數據(服務的實際地址)
key == value 一對一關系
2.2 Zonde 操作(create,set,delete,deleteall,get,rmr)(key,value)
客戶端
1.命令行
1.1 創建節點 (almosc 是自己隨意取的名字),不可以重復創建,一個節點只能對應一個
creat /alomsc "localhost:8080"
1.2 查詢節點
get /alomsc
1.3 修改節點
set /alomsc "localhost:8090"
1.4刪除節點
rmr /alomsc -- 刪除當前節點和所有的子節點
delete/alomsc -- 只能刪除沒有子節點的節點
1.5創建子節點 --在alomsc下創建子節點
create /alomsc/child "childName"
節點類型:
持久化節點(存儲在磁盤上,必須通過rmr,delete,deleteall 來進行刪除)
臨時節點 (存儲在內存,刪除可以手動,zookeeper關閉的時候也會刪除)
順序節點 (創建節點的時候會添加順序)--常見分布式鎖
創建臨時節點,另外臨時節點是不允許有子節點的
create -e /alomsc "temporary"
創建順序節點,順序節點下面是可以有子節點的
create -s /alomsc "sequence"
節點版本號:
version:節點(set,delete)
為什么會出現版本號的原因:
其原因和java中線程鎖的原理差不多,防止有多個客戶端對同一個節點操作產生錯誤。
2.java api (修改的時候根據的版本號要根據最新的版本號)
String path ="localhost:2181"; // 啟動java客戶端 5000是超時時間 ZooKeeper zooKeeper = new ZooKeeper(path, 5000, new Watcher() { @Override public void process(WatchedEvent watchedEvent) { Event.KeeperState state = watchedEvent.getState(); System.out.println(state.toString()); } }); byte[] data = "localhots:8099".getBytes(); // 創建 // zooKeeper.create("/alomsc",data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); System.out.println("success"); // 獲取版本號 Stat stat = zooKeeper.exists("/alex",true); // 修改 ,返回當前版本號 Stat stat1 = zooKeeper.setData("/alex", data, stat.getVersion()); System.out.println("版本號:"+stat.getVersion()); System.out.println("版本號2:"+stat1.getVersion()); // 刪除 // zooKeeper.delete("/almosc000000004",0);
ls / 列出根目錄節點下的所有文件 改目錄下有兩個節點
stat /zookeeper 查看節點狀態
zookeeper 是節點名稱
[zk: 127.0.0.1:2181(CONNECTED) 6] stat /zookeeper cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
cZxid:創建節點時的事務id
pZxid:子節點列表最后一次被修改的事務id
cversion:節點版本號
dataCersion:數據版本號
aclVerson:acl權限版本號
3.zkClien
4.aurator