今天就跟大家聊聊有关ZooKeeper 常用操作API有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
成都创新互联专注于企业成都营销网站建设、网站重做改版、下陆网站定制设计、自适应品牌网站建设、H5开发、商城网站制作、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为下陆等各大城市提供网站开发制作服务。
ZooKeeper是一个用于分布式应用程序的分布式开源协调服务。它使用一组简单的操作原语,使得分布式应用可以实现更高层次的服务——如同步、配置维护、群组和命名管理等。ZK具有高性能、高可用(复制)、有序等特征。
Class:org.apache.zookeeper.ZooKeeperpublic 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.ZooKeeperpublic 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有哪些有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。