Zookeeper的工作原理

目录

zk的选举机制

zk的节点类型

zk的监听器原理

向zk集群中注册服务的原理


 

zk的选举机制

 

我们已经知道只有zk集群半数以上处于正常启动时,zk才会提供服务。现在让我们来说说zk的选举机制。

假设有zk集群中有5台服务器。id为1-5,如果它们都同时启动,选举机制是怎么产生leader和follower的呢? 

Zookeeper的工作原理_第1张图片

1.即使同时启动,总有一个是最先启动成功的。这台服务器假设编号为1,此时它检测到集群中没有半数以上的服务器启动,此时它的选举状态是LOOKING(代表寻找leader的状态)。

2.紧接着启动的是2,它与最开始的1进行通信,互相交换自己的选举结果。由于两者都没有历史数据,所以id值较大的2胜出,但由于没有达到半数以上的服务器统一选举他。因此1和2都继续保持着LOOKING状态。

3.然后服务器3也启动了,根据前面的理论,3成为了1,2,3中的老大,此时3台服务器都选举了它,leader诞生了!

4.第4个服务器启动时,因为老大已经诞生了,所以即使id编号更大,4也只能作为小弟

5.最后一个服务器启动原理也和4一样,都是弟弟~

注意,如果3号leader服务器挂掉了,重新选举时zk集群会暂停服务,重新选leader比的是ZXid(事务id)

 

 

zk的节点类型

 

分为持久和短暂

Zookeeper的工作原理_第2张图片 

 

 

zk的监听器原理

 

监听器常用于监听节点数据的变化以及子节点增减的变化,其工作原理如下

1.首先要有一个main()线程

2.main线程中创建zk客户端。zk客户端包含两个线程:负责网络通信的connect和负责监听的listener

3.通过connect线程将注册的监听事件发给zk

4.将注册监听事件添加到zk的监听器列表中

5.当zk监听到书籍或路径有变化,就会将这个消息发送给listener线程

6.listener线程内部调用了process()方法对监听的结果进行处理

Zookeeper的工作原理_第3张图片

 

 

向zk集群中注册服务的原理

 

Zookeeper的工作原理_第4张图片 

你可能感兴趣的:([Zookeeper])