前一篇大体介绍了什么是zookeeper,以及其特点,下面回顾一下zookeeper的客户端操作,先用finalshell远程连接Linux主机(node01)。
1.进行客户端操作之前首先要明确zookeeper的数据模型:
1.1ZooKeeper 的数据模型,在结构上和标准文件系统的非常相似,拥有一个层 次的命名空间,都是采用树形层次结构.
1.2
1.3ZooKeeper 树中的每个节点被称为—个Znode。和文件系统的目录树一样,ZooKeeper 树 中的每个节点可以拥有子节点。
2.znode的组成及特点:
2.1每个 Znode 由 3 部分组成:
stat:此为状态信息, 描述该 Znode 的版本, 权限等信息
data:与该 Znode 关联的数据
children:该 Znode 下的子节点
2.2Znode 通过路径引用,如同 Unix 中的文件路径。路径必须是绝对的,因此他 们必须由 斜杠字符来开头
2.3Znode 存储数据大小有限制。
2.4Znode 兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、 时间戳等 数据结构,又像目录一样可以作为路径标识的一部分,并可以具有 子 Znode
3.zookeeper客户端操作:
3.1首先要进入到zookeeper安装目录,并且把zookeeper打开(命令:bin/zkCli.sh -server node01:2181)2181端口是固定的。
如图所示就是zookeeper正确打开。
ls / 命令:列出Path下所有子Znode
create /hello gaoshuai 命令:创建永久节点,其值是:gaoshuai
create -e /abc 123 命令:创建零时节点,值为:123(零时节点在会话结束之后会自动删除)
create -s /gaoshuai 123 命令:创建永久序列化节点,值为:123
create -e -s /gaoshuai 123 命令:创建临时序列化节点,值为:123
set /gaoshuai zookeeper 命令:修改节点数据为zookeeper
修改之后可以看到数据版本+1
delete /hello 命令:删除节点, 如果要删除的节点有子Znode则无法删除
rmr /abc 命令:删除节点, 如果有子Znode则递归删除
histroy 命令:列出历史记录
3.2节点属性:每个 znode 都包含了一系列的属性,通过命令 get,可以获得节点的属性。
dataVersion:数据版本号,每次对节点进行 set 操作,dataVersion 的值都会增加 1(即使设 置的是相同的数据),可有效避免了数据更新时出现的先后顺序问题。
cversion :子节点的版本号。当 znode 的子节点有变化时,cversion 的值就会增加 1。
aclVersion :ACL 的版本号。
cZxid :Znode 创建的事务 id。
ctime:节点创建时的时间戳.
mtime:节点最新一次更新发生时的时间戳.
4.watch机制
Zookeeper的watch机制 通知类似于数据库中的触发器, 对某个Znode设置 Watcher , 当Znode发生变化的时候, WatchManager 会调用对应的 Watcher 当Znode发生删除, 修改, 创建, 子节点修改的时候, 对应的 Watcher 会得到通知 Watcher 的特点 一次性触发 一个 Watcher 只会被触发一次, 如果需要继续监听, 则需要再次添加 Watcher 事件封装: Watcher 得到的事件是被封装过的, 包括三个内容 keeperState, eventType, path
只有一个细节就是开启zookeeper的时候要把Linux集群开启,不能只开一台虚拟机否则会报错。