ZOOKEEPER

发布于:2023-01-02 ⋅ 阅读:(549) ⋅ 点赞:(0)

目录

zookeeper的官网

zookeeper的主从集群

zookeeper的分布式锁机制

zookeeper原理

zookeeper的paxos算法引出的zab的协议

zk的watch监控

zk的分布式配置

zk的分布式锁


zookeeper的官网

Apache ZooKeeper

ZooKeeper数据保留在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟数。

zookeeper的主从集群

ZooKeeper只需不到200毫秒即可选出新的领导者

zookeeper的存储是一个目录树结构

zookeeper的分布式锁机制

Zookeeper实现分布式锁_kongmin_123的博客-CSDN博客_zookeeper实现分布式锁

zookeeper原理

Zookeeper原理解析_followwwind的博客-CSDN博客(Zookeeper原理解析)重要

1、Zookeeper的角色

  » 领导者(leader),负责进行投票的发起和决议,更新系统状态
  » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票
  » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
  » 客户端(client),请求发起方

Apache ZooKeeper - 集群中 Observer 的作用以及 与 Follow 的区别_小小工匠的博客-CSDN博客_zk的observer作用

zookeeper的paxos算法引出的zab的协议

重点可以介绍zookeeper的时候讲这些:

Zookeeper全解析——Paxos作为灵魂(paxos数据一致性算法)

在 ZooKeeper 集群中,Leader 服务器失效时,会在 Follow 集群服务器之间发起投票,最终选举出一个 Follow 服务器作为新的 Leader 服务器。除了 Leader 和 Follow 服务器,ZooKeeper 集群中还有一个 Observer 服务器。在 ZooKeeper 集群中,Observer 服务器对于提升整个 ZooKeeper 集群运行的性能具有至关重要的作用,需要抗住更高的读请求,就可以引入Observer节点。

ZAB(zookeeper的原子广播协议,zookeeper的zab是paxos协议的一个精简版)的过程图:

 • ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction id, 该id称为zxid. 由于zxid的递增性质, 如果zxid1小于zxid2, 那么zxid1肯定先于zxid2发生.

 创建任意节点, 或者更新任意节点的数据, 或者删除任意节点, 都会导致Zookeeper状态发生改变, 从而导致zxid的值增加.

第一次启动集群,以过半的那个myid最大的作为leader

若leader挂掉:心跳包机制keep-alived判断是否挂了,挂了就会发起投票

zk的watch监控

watch监控了之后,一旦有事件产生会回调callback到client

watch有两种: 
       1,new zk 时候,传入的watch,这个watch,session级别的,跟path 、node没有关系。

       2,watch的注册值发生在 读类型调用,get,exites。。。

zk的分布式配置

将配置数据data放在zookeeper中,不同的客户端可以连接zookeeper获取该配置数据,通过watch监控。一旦zookeeper数据发生变动,就会发生回调,通知get获取最新的配置信息。

zk的分布式锁

多个连接要获取一次获取一个资源,需要加锁。因为是分布式是不同的物理节点,不可能在各自的服务内部进行加锁,只能将锁放在外部。zookeeper是目前最佳的分布式的解决实现,可以通过sequence+watch监控实现分布式。

获得锁的人其实是一个临时节点,是通过session创建的,即使挂了也不会死锁。

获得锁的人获得锁后成功了,其他人如何知道锁被释放、删除。zookeeper通过4-2带有顺序的临时节点加watch监控实现,watch监控的回调会解决延迟问题,但是压力会很大,因为一旦发生改变就会callback到所有的人,然后其他所有人就会又开始抢锁。所以可用用序列临时节点,比如有1000个人去抢这把锁,他们就去一个父目录上去临时的创建临时的节点,第一个001,第二个002。。。。。。后面一个watch前一个节点,最小的节点所对应的人获得锁,一旦前面一个人改变了,就会触发回调时间,这样就解决了压力问题。

本文含有隐藏内容,请 开通VIP 后查看