您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關ZooKeeper 常用操作API有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
ZooKeeper是一個用于分布式應用程序的分布式開源協調服務。它使用一組簡單的操作原語,使得分布式應用可以實現更高層次的服務——如同步、配置維護、群組和命名管理等。ZK具有高性能、高可用(復制)、有序等特征。
Class:org.apache.zookeeper.ZooKeeper
public String create(String path, byte[] data, List acl, CreateMode createMode) throws KeeperException, InterruptedException
public void create(String path, byte[] data, List acl, CreateMode createMode, AsyncCallback.StringCallback cb, Object ctx)
創建一個給定路徑(path)的節點,并給它設置數據(data)和訪問控制列表(acl)。ZooKeeper中的節點相對于文件系統中的目錄結構,即是”directory”又是”regular file”。第二個create方法是create的異步版本,當創建完成時則調用異步callback。
這部分節選說說Zookeeper中的ACL
ZooKeeper通過ACL來對ZNode進行訪問控制。ZooKeeper客戶端為znode指定ACL列表,ZooKeeper服務器根據ACL列表判定某個請求ZNode的客戶端是否有對應操作的權限。
一個ACL對象由schema:ID和Permissions組成。
a). scheme: scheme對應于采用哪種方案來進行權限管理,zookeeper實現了一個pluggable的ACL方案,可以通過擴展scheme,來擴展ACL的機制。zookeeper-3.4.4缺省支持下面幾種scheme:
world: 它下面只有一個id, 叫anyone, world:anyone代表任何人,zookeeper中對所有人有權限的結點就是屬于world:anyone的
auth: 它不需要id, 只要是通過authentication的user都有權限(zookeeper支持通過kerberos來進行authencation, 也支持username/password形式的authentication)
digest: 它對應的id為username:BASE64(SHA1(password)),它需要先通過username:password形式的authentication
ip: 它對應的id為客戶機的IP地址,設置的時候可以設置一個ip段,比如ip:192.168.1.0/16, 表示匹配前16個bit的IP段
super: 在這種scheme情況下,對應的id擁有超級權限,可以做任何事情(cdrwa)
b). perm. ZooKeeper中有5種權限,從低位到高位分別是READ、WRITE、CREATE、DELETE和ADMIN,ACL的Permissions可以是5種權限中的1種或多種,它們的含義是:
* READ: 允許獲取該節點的值和列出子節點。
* WRITE: 允許設置該節點的值。
* CREATE: 允許創建子節點。
* DELETE: 可以刪除子節點。
* ADMIN: 允許為該節點設置權限。
org.apache.zookeeper.CreateMode可以設置znode是否為EPHEMERAL或者SEQUENTIAL。可以為下面四種值:
PERSISTENT 持久化目錄znode
PERSISTENT_SEQUENTIAL 順序自動編號的目錄znode。這個目錄節點是根據當前已存在的節點數遞增。
EPHEMERAL 臨時目錄znode,一旦創建這個znode的客戶端和服務器斷開,這個節點就會自動刪除。臨時節點(EPHEMERAL)不能有子節點數據
EPHEMERAL_SEQUENTIAL 臨時自動編號znode。
在zkCli中實現了create的命令封裝,可以用戶測試和數據管理:
create [-s] [-e] path data acl
其中”-s”表示創建一個順序自動編號的節點,”-e”表示創建一個臨時節點.默認為持久性節點
例如:
創建一個永久節點和臨時節點
create /test null Created /test create -e /test0 null Created /test0
創建一個順序自動編號的節點,ACL為使用digest(用戶名:test 密碼:debugo),權限為所有(rwcda)。關于digest的產生,可以參考zookeeper中 DigestAuthenticationProvider.generateDigest(String ipName)方法;通過向此方法指定原始的用戶名和密碼即可獲得”digest”之后的字符串,比如傳入”test:test”,將會得 到”test:V28q/NynI4JI3Rk54h0r8O5kMug=”,其內部原理是將”密碼”部分進行MD5 + sha1操作.
create -s /test0/test null digest:test:V28q/NynI4JI3Rk54h0r8O5kMug=:rwcda Ephemerals cannot have children: /test0/test create -s /test/test null digest:test:V28q/NynI4JI3Rk54h0r8O5kMug=:rwcda Created /test/test0000000000
創建一個節點,其ACL使用ip(172.19.17.0/24)只具有讀權限
create /test/test1 "hello world" ip:172.19.17.0/24:r Created /test/test1
2. exist
class:org.apache.zookeeper.ZooKeeper
public Stat exists(String path, Watcher watcher) throws KeeperException, InterruptedException
返回某個path的znode是否存在。并設置是否監控這個節點(第二個參數boolean watcher)。當第二個參數為true且這個語句執行成功時,監聽器(watcher)就會在成功執行建立節點/刪除節點/修改該節點數據時候被觸發。
exists(String, Watcher)
重載方法,這里可以指定特定的監聽器(watcher)對象。
exists(String, Watcher, AsyncCallback.StatCallback, Object)
exists(String, boolean, AsyncCallback.StatCallback, Object)
exist的異步實現
public void delete(String path, int version) throws InterruptedException, KeeperException
刪除path對應的znode,version為-1可以匹配任何版本,也就是刪除這個節點所有的數據。此外,delete同樣存在異步版本。
delete(String path, int version, AsyncCallback.VoidCallback cb, Object ctx)
delete的異步版本。
例如zkCli中刪除某個節點:
delete /test/test1
4. getChildren
public List getChildren(String path, boolean watch) throws KeeperException, InterruptedException
獲取指定path下所有的子znode,這個方法和exist一樣同樣可以設置watcher/指定特定的Watcher對象。
Stat setData(String path, byte[] data, int version)
當給定path的節點存在時給path設置數據,可以指定這個數據的版本號。如果version為-1則可以匹配任意版本。
void setData(String path, byte[] data, int version, AsyncCallback.StatCallback cb, Object ctx)
setData的異步版本。
byte[] getData(String path, Watcher watcher, Stat stat)
獲取這個path對應的znode節點的數據,數據的版本等信息可以通過stat來指定。
void getData(String path, Watcher watcher, AsyncCallback.DataCallback cb, Object ctx)
getData的異步版本。
Stat setACL(String path, List acl, int version)
給某個znode節點重新設置訪問權限,需要注意的是ZooKeeper中的目錄節點權限都不具有傳遞性,父znode節點的權限不能傳遞給子目錄節點。在create中已經介紹了ACL的設置方法,可以設置一系列ACL規則(即指定一系列ACL對象)。
void setACL(String path, List acl, int version, AsyncCallback.StatCallback cb, Object ctx)
setACL的異步版本
List getACL(String path, Stat stat)
返回某個znode節點的ACL對象的列表。
void getACL(String path, Stat stat, AsyncCallback.ACLCallback cb, Object ctx)
getACL的異步版本
例如zkCli中設置某個ACL規則:
[zk: localhost:2181(CONNECTED) 43] setAcl /test world:anyone:r cZxid = 0xf000500ed ctime = Wed Sep 24 15:13:29 CST 2014 ...... [zk: localhost:2181(CONNECTED) 44] getAcl /test 'world,'anyone : r
看完上述內容,你們對ZooKeeper 常用操作API有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。