天天看点

zookeeper的使用与基本原理(一)

在上一篇中完成了zookeeper的单机版与集群版的配置,这一篇主要介绍使用zookeeper时,用到的常见命令,先对zookeeper的使用有个简单的了解。下一篇会着重介绍zookeeper的一些相关信息与原理。

先来看下zookeeper的数据结构:

zookeeper的使用与基本原理(一)

zookeeper的数据结构可以看做是一个树状,每个节点是znode(zookeeper node),每个节点也可以有多个子节点。

节点既可以存储数据信息、对应权限,也可以作为一个路径来指定信息。

一个znode一般可以分为三个部分:

1、节点中的数据。

2、节点的子节点。

3、存放节点的状态:stat。

stat信息:

zookeeper的使用与基本原理(一)

属性说明:

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。节点的名称是一定要带上"/"的。

zookeeper的使用与基本原理(一)

查看节点:get

zookeeper的使用与基本原理(一)

更新节点:set

zookeeper的使用与基本原理(一)

删除节点:delete

zookeeper的使用与基本原理(一)

查看节点状态:stat

zookeeper的使用与基本原理(一)

查看节点列表

有ls与ls2两种方式,前者可以查看当前节点下有多少子节点,后者不仅可以查看有多少子节点,还可以查看当前节点的信息:

zookeeper的使用与基本原理(一)

监听器

通过对某个节点设置监听器(watcher),可以在节点的值发生改变的时候,去通知客户端。但是需要注意的是,监听器watcher是只能够触发一次,使用一次之后就没用了。

zookeeper的使用与基本原理(一)

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:添加认证用户。

zookeeper的使用与基本原理(一)