特性
1. 过半性 - 选举、存活、操作
2. 数据一致性 - 原子广播
3. 原子性 - 原子广播
4. 顺序性 - 队列
5. 实时性 - 可以动态监控节点的变化
6. 可靠性 - 崩溃恢复
特点
1. Zookeeper本身是一个树状结构 - Znode树
2. 根节点是/
3. 每一个子节点称之为是一个znode节点
4. 所有的节点路径都必须以根节点作为起始
5. 每一个节点都必须存储数据, 这个数据一般是配置信息或者是对节点的描述
6. 每一个持久节点下都可以挂载子节点
7. Znode树本身维系在磁盘以及内存中
8. Znode树维系在内存中的目的:为了快速查询
9. Znode树维系在磁盘中的目的:崩溃恢复
10. Znode树在磁盘中的存储位置由dataDir属性决定。dataDir默认是在/tmp下
11. Zookeeper存在事务概念。Zookeeper会对每一次的写操作(create、delete、rmr、set)分配一个全局递增的编号,称之为是事务id - Zxid
二、选举机制
1.过程
1. 第一个阶段:数据恢复阶段。每一个节点(服务器)会找寻当前节点中的最大事务id
2. 第二个阶段:选举阶段。刚开始的时候,Zookeeper集群中的每一个节点都会推荐自己当leader,同时每一个节点会把自己节点的选举信息发送给其他的节点,经过比较之后,最后胜出的节点就成为leader,其他的节点就成为follower。
选举的细节
细节
1. 选举信息:
a. 当前节点的最大事务id - 一般而言是mZxid或者是pZxid
b. 当前节点的选举编号 - myid
c. 逻辑时钟值 - 保证选举在同一轮次上
2. 比较原则:
a. 先比较两个节点的最大事务id,谁大谁赢
b. 如果事务id一致,那么比较myid,谁大谁赢
3. 当一个节点胜过一半及以上的节点的时候,那么这个节点就会成为leader - 选举的过半性
4. 当一个集群中已经选举出来了leader,那么后续添加的节点的事务id以及myid无论多大,这个节点都只能成为follower
5. 节点状态:
a. looking/voting - 选举状态
b. follower - 追随者
c. leader - 领导者
d. observer - 观察者
6. 在集群中,如果出现了多个leader,这种情况称之为脑裂
7. 在Zookeeper集群中,只有半数以上的节点存活的时候才会进行选举才会对外服务 - 存活的过半
8. Zookeeper的节点个数一般是奇数个