在上一篇中完成了zookeeper的单机版与集群版的配置,这一篇主要介绍使用zookeeper时,用到的常见命令,先对zookeeper的使用有个简单的了解。下一篇会着重介绍zookeeper的一些相关信息与原理。
先来看下zookeeper的数据结构:
zookeeper的数据结构可以看做是一个树状,每个节点是znode(zookeeper node),每个节点也可以有多个子节点。
节点既可以存储数据信息、对应权限,也可以作为一个路径来指定信息。
一个znode一般可以分为三个部分:
1、节点中的数据。
2、节点的子节点。
3、存放节点的状态:stat。
stat信息:
属性说明:
cZxid:数据节点创建时的事务ID
ctime:数据节点创建时的时间
mZxid:数据节点最后一次更新时的事务ID
mtime:数据节点最后一次更新时的时间
pZxid:数据节点的子节点最后一次被修改时的事务ID
cversion:子节点的更改次数
dataVersion:节点数据的更改次数
aclVersion:节点的ACL的更改次数
ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的SessionID;如果节点是持久节点,则该属性值为0.
dataLength:数据内容的长度
numChildren:数据节点当前的子节点个数。
节点类型
zookeeper的节点类型可以分为临时节点与永久节点。这个节点的类型在节点创建的时候就已经确定了,以后是不能够被修改的。
临时节点:这种类型的节点的生命周期与本次连接的会话有关,当会话结束的时候,临时节点就会被删除。当然了,也可以手动删除节点。zookeeper中,临时节点是不允许临时节点有子节点的。
永久节点:这个就好理解了,节点创建之后,即使会话结束了,节点也不会删除。
zookeeper的操作节点命令
zookeeper对节点的操作类型与sql语句差不多,也是有增删改查四种类型的。
新增节点
create:分为持久化节点、临时节点(-e)、有序节点(-s)。类似于map形式,节点名称为key,节点中的内容为value。节点的名称是一定要带上"/"的。
查看节点:get
更新节点:set
删除节点:delete
查看节点状态:stat
查看节点列表
有ls与ls2两种方式,前者可以查看当前节点下有多少子节点,后者不仅可以查看有多少子节点,还可以查看当前节点的信息:
监听器
通过对某个节点设置监听器(watcher),可以在节点的值发生改变的时候,去通知客户端。但是需要注意的是,监听器watcher是只能够触发一次,使用一次之后就没用了。
ACL权限控制
我们都用过linux系统,知道每个文件有可读、可写、可执行的权限配置,通过设置,可以让不同的用户对文件有不同的操作权限。zookeeper也是如此,可以设置不同的权限类别,完成对不同的节点的操作。
acl权限控制:使用scheme、id、permission来标识:
scheme(权限模式):授权的策略。
id(授权对象):授权的对象。
permission(权限):授予的权限。
在zookeeper中,它的权限控制是针对节点的,所以如果想设置权限,那么就需要对不同的节点都要设置权限。
每个节点支持多种权限控制方案与权限,但是子节点不会继承父节点的权限。
权限类型:
world:只有一个用户:anyone,表示登录的所有人,也是zookeeper的默认权限。
ip:对指定ip的客户端授权
auth:对已添加认证的用户认证
digest:使用username:password的方式认证
授予的权限:
分为create、delete、read、writer、admin:也就是增、删、查、改、管理。
授权的相关命令:
getAcl:读取Acl权限。
setAcl:设置Acl权限。
addauth:添加认证用户。