其余更多java基础文章:
java基础学习(目录)java
概述
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。node
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理你们都关心的数据,而后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者作出相应的反应,从而实现集群中相似Master/Slave管理模式设计模式
Zookeeper=文件系统+通知机制服务器
基础
数据结构
ZooKeeper数据模型的结构与Unix文件系统很相似,zookeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,其上的每个节点,咱们称之为"znode",每个znode默认可以存储1MB的数据,每一个ZNode均可以经过其路径惟一标识。session
节点类型
-
Znode有两种类型:数据结构
- 短暂(ephemeral):客户端和服务器端断开链接后,建立的节点本身删除
- 持久(persistent):客户端和服务器端断开链接后,建立的节点不删除
-
Znode有四种形式的目录节点(默认是persistent )框架
- 持久化目录节点(PERSISTENT)
客户端与zookeeper断开链接后,该节点依旧存在
- 持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)
客户端与zookeeper断开链接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
- 临时目录节点(EPHEMERAL)
客户端与zookeeper断开链接后,该节点被删除
- 临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL)
客户端与zookeeper断开链接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
-
建立znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护分布式
-
在分布式系统中,顺序号能够被用于为全部的事件进行全局排序,这样客户端能够经过顺序号推断事件的顺序post
特色
- Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。
- Leader负责进行投票的发起和决议,更新系统状态
- Follower用于接收客户请求并向客户端返回结果,在选举Leader过程当中参与投票
- 集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
- 全局数据一致:每一个server保存一份相同的数据副本,client不管链接到哪一个server,数据都是一致的。
- 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。
- 数据更新原子性,一次数据更新要么成功,要么失败。
- 实时性,在必定时间范围内,client能读到最新数据。
stat结构体
- czxid- 引发这个znode建立的zxid,建立节点的事务的zxid(ZooKeeper Transaction Id) 每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。 事务ID是ZooKeeper中全部修改总的次序。每一个修改都有惟一的zxid,若是zxid1小于zxid2,那么zxid1在zxid2以前发生。
- ctime - znode被建立的毫秒数(从1970年开始)
- mzxid - znode最后更新的zxid
- mtime - znode最后修改的毫秒数(从1970年开始)
- pZxid-znode最后更新的子节点zxid
- cversion - znode子节点变化号,znode子节点修改次数
- dataversion - znode数据变化号
- aclVersion - znode访问控制列表的变化号
- ephemeralOwner- 若是是临时节点,这个是znode拥有者的session id。若是不是临时节点则是0。
- dataLength- znode的数据长度
- numChildren - znode子节点数量
客户端命令行操做
命令基本语法 |
功能描述 |
help |
显示全部操做命令 |
ls path [watch] |
使用 ls 命令来查看当前znode中所包含的内容 |
ls2 path [watch] |
查看当前节点数据并能看到更新次数等数据 |
create |
普通建立 |
-s |
含有序列 |
-e |
临时(重启或者超时消失) |
get path [watch] |
得到节点的值 |
set |
设置节点的具体值 |
stat |
查看节点状态 |
delete |
删除节点 |
rmr |
递归删除节点 |