ZooKeeper简介:
ZooKeeper是一个分布式协调服务,提供一种集中式的信息存储服务。数据存储在内存中,类型文件系统的树形结构(目录和文件),高吞吐低延迟,集群高可靠。
可以作为分布式配置中心,分布式锁,服务注册中心等等。
ZooKeeper三大核心概念 session,数据模型,watch
1:session
1:当一个客户端连接一个会话,会给客服端分配一个唯一会话ID。
2:客户端需要以特定的时间间隔(ticktime)发送心跳保持会话有效。
3:超过时间未收到客户端心跳,则判断客户端已经下线默认为2倍ticktime。
4:客户端的请求按FIFO(先进先出)顺序执行。
数据模型
层次命名空间:
1:以 / 为根
2:节点可以包含与之关联的数据以及子节点(即是文件也是文件夹)
3:节点的路径总是表示为规范的,绝对的,斜杠分割的路径
znode:
1:命名唯一,命名规范
2:节点类型,持久,顺序持久,临时,顺序临时
3:节点数据构成
持久节点 create /node1 111
临时节点 create -e /node1 111
顺序节点 create -s /node1/cp 222 (cp0000000001)
create -s /node1/3333 0000000002
临时顺序节点 create -e -s /node1 4444
顺序节点 10位十进制序号
每个父节点一个计数器
计数器是带符号 int(4字节) 到2147483647之后将会溢出
节点数据 存储的协调数据(状态信息,配置,位置信息等等)
节点元数据 stat结构
数据上线 1M
节点元数据 stat结构
多种方式跟踪时间
zxid ZooKeeper中的每次更改操作都对应了一个唯一事务ID,他是一个全局有序的 如果zxid1 < zxid2 则表示zxid1 发生在zxid2 之前
version number版本号 对节点的每次更改都会增加版本号
ticks 当使用多服务器ZooKeeper时 ,服务器使用”滴答“来定义事件的时间,如状态上传,会话超时,对等点之间的连接超时等。滴答时间仅通过最小会话超时(滴答时间的2倍)间接公开;如果客户端请求的会话超时小于最小会话超时,服务器将会告诉客户端会话超时实际上是最小会话超时。
real time ZooKeeper 除了在znode的创建和修改时将时间戳放入stat结构之外,根本不使用realtime或时钟时间。
watch监听机制
客户端可以给node增加一个监听事件
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
PERSISTENT: 对设置的节点生效
PERSISTENT_RECURSIVE:对设置的节点及其对所有子节点生效
两者都为持久化监听
首先 新建一个/node2 并且开启监听
然后再开启一个客户端去修改/node2的值
此时之前的客户端会收到一条消息
这就是watch机制
ZooKeeper特性
1:顺序一致性
2:原子性
3:单个镜像系统
4:可靠性
5:及时性
ZooKeeper选举机制
ZooKeeper内部有 leader,follow,observer 三种模式。
leader:一个ZooKeeper集群上只有一个leader节点。
follow:当节点未被选举为leader后,自动成为follow。
observer:需要单独配置,observer节点不参与投票,其余功能和follow一致。