博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper节点类型
阅读量:7176 次
发布时间:2019-06-29

本文共 1109 字,大约阅读时间需要 3 分钟。

hot3.png

ZooKeeper 节点是有生命周期的,这取决于节点的类型。在 ZooKeeper 中,节点类型可以分为持久节点(PERSISTENT )、临时节点(EPHEMERAL),以及时序节点(SEQUENTIAL ),具体在节点创建过程中,一般是组合使用,可以生成以下 4 种节点类型。

在持久、临时、顺序节点 中 临时节点是不能有子节点的,顺序节点是直接在你给的节点路径后边加上序列号(不是在下一级目录加序列号,比如你给的路径是 /v1/123  那么生成的顺序节点形如  /v1/12300000001)

持久节点(PERSISTENT)
所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。
持久顺序节点(PERSISTENT_SEQUENTIAL)
这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会自动为给定节点名加上一个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最大值。
临时节点(EPHEMERAL)
和持久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。
临时顺序节点(EPHEMERAL_SEQUENTIAL)
 可以用来实现分布式锁

客户端调用create()方法创建名为“_locknode_/guid-lock-”的节点,需要注意的是,这里节点的创建类型需要设置为EPHEMERAL_SEQUENTIAL。
客户端调用getChildren(“_locknode_”)方法来获取所有已经创建的子节点,注意,这里不注册任何Watcher。
客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点序号最小,那么就认为这个客户端获得了锁。
如果在步骤3中发现自己并非所有子节点中最小的,说明自己还没有获取到锁。此时客户端需要找到比自己小的那个节点,然后对其调用exist()方法,同时注册事件监听。
之后当这个被关注的节点被移除了,客户端会收到相应的通知。这个时候客户端需要再次调用getChildren(“_locknode_”)方法来获取所有已经创建的子节点,确保自己确实是最小的节点了,然后进入步骤3。

转载于:https://my.oschina.net/u/157514/blog/752346

你可能感兴趣的文章
datatables表头与数据无法对齐的解决方案
查看>>
Cisco 路由器 secondary address实现RIPV1不连续子网
查看>>
每天一个linux命令(14):head 命令
查看>>
通过 Apache 配置 Rewrite 支持 .htaccess
查看>>
如何从硬盘安装WIN7原版镜像?
查看>>
ceph学习笔记之六 数据读写过程
查看>>
为UC做准备:准备Exchange 2010的先决条件
查看>>
Eclipse快捷键大全(转载)
查看>>
weblogic启动脚本
查看>>
cPanel推出测试免费试用
查看>>
Wireshark的https代理抓包(whistle中间人代理)
查看>>
redhat下安装Wineqq2012
查看>>
linux下配置pptp 客户端
查看>>
java发送短信至手机
查看>>
rsyslog+loganalyzer+evtsys搭建集中式监控系统
查看>>
Python 学习笔记之函数
查看>>
mysql-mmm高可用架构
查看>>
使用shell脚本搭建源码LAMP环境
查看>>
我的友情链接
查看>>
关于VMware上Linux克隆后网卡名称修改的操作
查看>>