ZooKeeper节点类型与分布式锁

2018-12-20  本文已影响0人  沐兮_d64c

1,zookeeper节点类型。

1)是否持久
persistent :持久节点。需要主动删除
ephemeral : 瞬时节点。与客户端session结束,自动删除; 不能有子节点
2)是否有序
persistent_sequential : 持久有序节点。
eg: create -s /zk/n6_ n6
Created /zk/n6_0000000006
ephemeral_sequential : 瞬时有序节点。
eg:create -e -s /zk/temp/t4 t4
Created /zk/temp/t40000000003
3)CreateMode节点数据类型

image.png
4)zk数据存储结构
image.png
5)命令介绍
ls命令: 列出Zookeeper指定节点下,下一级的所有子节点。
get命令 : 获取指定节点的数据内容和属性信息。
set命令:set path data [version] 设置节点的数据和版本
create命令:create [-s] [-e] path data acl 创建一个新节点。
delete命令 :删除节点。

2,zk watch

1)通过3个读调用可以设置watches。We can set watches with the three calls that read the state of ZooKeeper exists, getData, and getChildren
2)Created event: Enabled with a call to exists.
Deleted event: Enabled with a call to exists, getData, and getChildren.
Changed event: Enabled with a call to exists and getData.
Child event: Enabled with a call to getChildren.

3,瞬时有序节点实现分布式锁

1)znode 可以被监控。
节点数据修改、子节点变化、节点删除等。
一旦变化可以通知设置监控的客户端。
通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。
2)分布式锁步骤。
注:zk设置watcher的操作和读操作是原子的。读取子节点列表同时设置监听器
1. 父节点持久节点/lock
2. 所有客户端在/lock下创建 瞬时有序节点/lock/seq-0000000000、/lock/seq-0000000001、依次类推
3. 获取/lock下所有子节点getChildren("/lock")方法,判断自己是否为最小的。是:获取锁; 否:监听自己前一位子节点的删除消息(调用exist()方法,同时注册事件监听。 ),获得通知后重复该步骤。
4. 执行代码。完成后释放锁。
4)使用zookeeper + curator,完成分布式锁。

上一篇下一篇

猜你喜欢

热点阅读