Zookeeper内部原理

Zookeeper概述 | 安装部署(Windows和Linux):https://blog.****.net/weixin_45606067/article/details/108619378

1、选举机制(面试重点)

1)半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper 适合安装奇数台服务器。

2)Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader 是通过内部的选举机制临时产生的。

3)以一个简单的例子来说明整个选举的过程。
假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么,如图所示。

Zookeeper内部原理

  1. 服务器 1 启动, 发起一次选举。服务器 1 投自己一票。此时服务器 1 票数一票,不够半数以上(3 票),选举无法完成,服务器 1 状态保持为 LOOKING;
  2. 服务器 2 启动, 再发起一次选举。服务器 1 和 2 分别投自己一票并交换选票信息:此时服务器 1 发现服务器 2 的 ID 比自己目前投票推举的(服务器 1)大,更改选票为推举服务器 2。此时服务器 1 票数 0 票,服务器 2 票数 2 票,没有半数以上结果,选举无法完成,服务器 1, 2 状态保持 LOOKING
  3. 服务器 3 启动, 发起一次选举。此时服务器 1 和 2 都会更改选票为服务器 3。此次投票结果:服务器 1 为 0 票,服务器 2 为 0 票,服务器 3 为 3 票。此时服务器 3 的票数已经超过半数,服务器 3 当选 Leader。服务器 1, 2 更改状态为 FOLLOWING,服务器 3 更改状态为 LEADING;
  4. 服务器 4 启动, 发起一次选举。此时服务器 1, 2, 3 已经不是 LOOKING 状态,不会更改选票信息。交换选票信息结果:服务器 3 为 3 票,服务器 4 为 1 票。此时服务器 4服从多数,更改选票信息为服务器 3,并更改状态为 FOLLOWING;
  5. 服务器 5 启动,同 4 一样当小弟。

2、节点类型

  • 持久(Persistent):客户端和服务器端断开连接后, 创建的节点不删除
  • 短暂(Ephemeral):客户端和服务器端断开连接后, 创建的节点自己删除

Zookeeper内部原理

  1. 持久化目录节点 客户端与Zookeeper断开连接后,该节点依旧存在
  2. 持久化顺序编号目录节点 客户端与Zookeeper断开连接后, 该节点依旧存在, 只是Zookeeper给该节点名称进行顺序编号
  3. 临时目录节点 客户端与Zookeeper断开连接后, 该节点被删除
  4. 临时顺序编号目录节点 客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。

说明:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

注意:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序, 这样客户端可以通过顺序号推断事件的顺序

3、Stat结构体

  1. czxid - 创建节点的事务zxid

每次修改ZooKeeper 状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
事务ID是ZooKeeper 中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2, 那么zxid1 在zxid2之前发生。

  1. ctime - znode 被创建的毫秒数(从1970年开始)
  2. mzxid - znode 最后更新的事务zxid
  3. mtime - znode 最后修改的亳秒数(从1970年开始)
  4. pZxid-znode 更新的子节点zxid
  5. cversion - zmnode 子节点变化号,znode子节点修改次数
  6. dataversion - znode 数据变化号
  7. acIVersion - znode 访问控制列表的变化号
  8. ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。 如果不是临时节点则是0
  9. dataLength - znode 的数据长度
  10. numChildren - znode 子节点数量

4、监听器原理(面试重点)

Zookeeper内部原理

5、写数据流程

Zookeeper内部原理


如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发。
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客