Zookeeper 从入门到精通(三)Zookeeper 原理

1.1 选举机制

  1. 半数机制:集群中半数以上的机器存活,集群可用,所以 Zookeeper 适合安装奇数台服务器,存活服务器要大于挂掉的服务器
  2. Zookeeper 在配置文件中没有指定 Master 和 Slave。但是,Zookeeper 工作时,有一个节点作为 Leader,其它为 Follower,leader 通过内部选举机制临时产生。
  3. 多个服务器同时启动的话,选举 myid 最大的作为 leader
  4. 多个服务器依次启动的话,第一个启动处于 looking 状态,第二个启动之后 编号大,但投票数未超过半数,均处于 looking 状态。第三台服务器启动之后,编号最大所以第三台胜出,成为 leader,其它服务器成为 follower,第四台启动之后虽然编号大,但是第三台服务器已经胜出,所以第四台服务器成为 follower
  5. 如果正常运行的 Zookeeper 集群有机器 down 掉,需要重新选举的话,选举的过程需要加入 数据 id(数据的 version) 服务器 id(myid) 逻辑时钟(每次选举对应一个值,从 0 开始)等。逻辑时钟小的选举结果忽略,重新投票。统一逻辑时钟后,数据 id 大的胜出,数据 id 相同的话,服务器 id 大的胜出

1.2 节点类型

  • 持久(Persistent)
    • 客户端与 Zookeeper 断开连接后,节点仍然存在,持久化顺序编号目录节点
  • 短暂(Ephemeral)
    • 客户端与 Zookeeper 断开连接后,节点被删除

1.3 Stat 结构体

  • czxid
    • 创建节点的事务 id,每次修改 Zookeeper 的状态都会收到一个 zxid 形式的时间戳,事务id 是 Zookeeper 中所有修改总的次序,每个修改都有唯一的 zxid
  • ctime-znode
    • 被创建的毫秒数
  • mzxid-znode
    • 最后更新的事务 zxid
  • mtime-znode
    • 最后修改的毫秒数
  • pZxid-znode
    • 最后更新的子节点 zxid
  • cversion-znode
    • 子节点变化号,znode 子节点修改次数
  • dataversion-znode
    • 数据变化号
  • aclVersion
    • 访问控制列表的变化号
  • ephemeralOwner-
    • 如果是临时节点,这个是 znode 拥有者的 session id。如果不是临时节点为 0
  • dataLength-znode
    • 数据长度
  • numChildren-znode
    • 子节点数量

1.4 监听器原理

  1. 首先有一个 main() 线程
  2. 在 main 线程中创建 Zookeeper 客户端,这个时候会创建两个线程,一个 connect 负责网络连接,一个 listener 负责监听
  3. 通过 listener 将注册的监听事件发送给 Zookeeper
  4. 在 Zookeeper 注册监听列表中将注册的监听事件添加到列表中
  5. Zookeeper 监听到有数据或者路径发生变化,将消息发送给 listener 线程
  6. listener 线程内部调用 process() 方法

1.5 写数据流程

  1. 客户端向 Zookeeper 的 Server 上写数据,发送一个请求
  2. Server 会将接收到的请求转发给 leader,leader 将请求广播给各个 Server,各个 Server 写成功后会通知 leader
  3. 当 leader 收到大多数 Server 数据写成功了,就说明数据写成功了。leader 告诉第一个发送过来请求的 Server 数据写成功了
  4. Server 通知客户端数据写成功后,操作完成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起来搬砖呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值