美文网首页
ZooKeeper节点类型与分布式锁

ZooKeeper节点类型与分布式锁

作者: 沐兮_d64c | 来源:发表于2018-12-20 21:59 被阅读0次

    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,完成分布式锁。

    相关文章

      网友评论

          本文标题:ZooKeeper节点类型与分布式锁

          本文链接:https://www.haomeiwen.com/subject/elvukqtx.html