zookeeper具有文件系统、通知机制
四种数据类型
1、持久无序号
2、持久有序号
3、临时无序号
4、临时有序号
ACL即为访问权限列表
watcher对象为注册节点事件的回调函数
步骤:
1、注册到相应节点
2、事件触发,
3、回调函数
zab协议
这是一种崩溃恢复和原子广播的特性
集群管理
集群下所有的server会约定在一个创建一个父目录,然后在里面创建关于本server信息的临时节点。其原理就是通过临时节点在server关闭后会自动删除,再通过watcher机制通知到其他server,新增server也是相同的道理
leader选举
当server启动后,会进入到looking状态,并且给自己投一票,随后接收其他server的投票信息,会将收到的投票信息与自身那一票进行PK,权重为epoll,zxid,myid,得到最终胜者,若某server得票超过半数,则将自身设置为follower状态
功能介绍
命名服务、配置管理、集群管理、分布式锁、队列管理
命名服务
意思是值可以通过某唯一资源定位路径找到对应资源,可以作为文件系统和注册中心
配置管理
基于zookeeper的watcher机制,当节点内容发生改变时,通知到客户端
集群管理
基于zookeeper的watcher机制,所有server在约定的路径创建父节点,并在该节点下创建所有server的信息,如果出现server宕机时,由于server信息节点为临时节点,所以会被删除,此时将触发watch回调,告诉其他server,有兄弟节点挂了,加入集群同理,另外还基于主从复制原理,由集群的master将信息同步到各个follower,若半数以上成功则说明同步成功
分布式锁
基于watcher机制,创建临时有序或无序节点,进行独占式或有序锁获取
消息队列
基于watcher机制,创建临时有序节点,进行消息读取与确认,回调watch用于确认消息是否正常消费
Zookeeper的核心为原子广播,用于同步各个server之间的信息,zab协议就是一种实现,它具备两种模式,广播模式和恢复模式。当master节点宕机后,将切换到恢复模式直至master被选举出来将进入到广播模式进行数据的同步
zookeeper 采用了递增的事务 Id 来标识,所有的 proposal(提议)都在被提出的时候加上了 zxid,zxid 实际 上是一个 64 位的数字,高 32 位是 epoch(时期; 纪元; 世; 新时代)用来标识 leader 是否发生改变,如果有 新的 leader 产生出来,epoch 会自增,低 32 位用来递增计数。当新产生 proposal 的时候,会依据数据库的 两阶段过程,首先会向其他的 server 发出事务执行请求,如果超过半数的机器都能执行并且能够成功,那么就 会开始执行
zab是工作协议,paxos是选举算法
节点:
zk临时节点与持久节点在服务端的维护成本可能比持久的大,因为是跟随session的生命周期走
