ZooKeeper是一个用于分布式应用程序的分布式开源协调服务。它使用一组简单的操作原语,使得分布式应用可以实现更高层次的服务——如同步、配置维护、群组和命名管理等。ZK具有高性能、高可用(复制)、有序等特征。请参考上一篇译文zookeeper:一个用于分布
ZooKeeper是一个用于分布式应用程序的分布式开源协调服务。它使用一组简单的操作原语,使得分布式应用可以实现更高层次的服务——如同步、配置维护、群组和命名管理等。ZK具有高性能、高可用(复制)、有序等特征。请参考上一篇译文zookeeper:一个用于分布式应用的分布式协调服务。本文简单介绍一下开发中经常使用的方法(文档:ZooKeeper API)。
1. create
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。
(1). org.apache.zookeeper.data.ACL
这部分节选说说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: 允许为该节点设置权限。
(2). org.apache.zookeeper.CreateMode
org.apache.zookeeper.CreateMode可以设置znode是否为EPHEMERAL或者SEQUENTIAL。可以为下面四种值:
PERSISTENT 持久化目录znode
PERSISTENT_SEQUENTI本文来源gao($daima.com搞@代@#码$网AL 顺序自动编号的目录znode。这个目录节点是根据当前已存在的节点数递增。
EPHEMERAL 临时目录znode,一旦创建这个znode的客户端和服务器断开,这个节点就会自动删除。临时节点(EPHEMERAL)不能有子节点数据
EPHEMERAL_SEQUENTIAL 临时自动编号znode。
(3). zkCli命令
在zkCli中实现了create的命令封装,可以用户测试和数据管理:
create [-s] [-e] path data acl
其中”-s”表示创建一个顺序自动编号的节点,”-e”表示创建一个临时节点.默认为持久性节点
例如:
创建一个永久节点和临时节点
create /test nullCreated /testcreate -e /test0 nullCreated /test0