【zookeeper】工作机制 & 原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Francis123580/article/details/82254317

会话机制

会话概念

zookeeper的连接与会话就是客户端通过实例化Zookeeper对象来实现客户端与服务端创建并保持TCP连接的过程


会话状态

在zookeeper客户端与服务端成功完成连接创建后,就创建了一个会话,zookeeper会话在整个运行期间的生命周期中,会在不同的会话状态中之间进行切换

状态分为CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE


会话属性

  • sessionID:会话ID,唯一标识一个会话
  • TimeOut:会话超时时间,客户端配置超时时间
  • TickTime:下次会话超时时间点,便于实行”分桶策略”管理,大致为当前时间+TimeOut
  • isClosing:标记一个会话是否已经被关闭,超时失效时,服务端对此标记

Watch机制

zookeeper实现分布式进程的状态(znode的Data、Children)共享时,基于性能的考虑采用了类似的异步非阻塞的主动通知模式即Watch机制,使得分布式进程之间的“共享状态通信”更加实时高效

客户端可以在znodes进行监听。znode的变化会触发这个监听器然后清除它。当一个监听器被触发的时候,zookeeper会给客户端发送一个通知


一次性触发器:客户端在Znode设置了Watch时,如果Znode内容发生改变,那么客户端就会获得Watch事件

发送至客户端:Watch事件是异步发送到Client,zookeeper可以保证客户端发送过去的更新顺序是有序的

设置watch的数据内容:znode改变有很多种方式,例如:节点创建,节点删除,节点改变,子节点改变等等。zookeeper维护了两个Watch列表,一个节点数据Watch列表,另一个是子节点Watch列表。


运行机制

1、Watch是轻量级的,其实就是本地JVM的Callback,服务器端只是存了是否有设置了Watcher的布尔类型。

2、在服务端,在FinalRequestProcessor处理对应的Znode操作时,会根据客户端传递的watcher变量,添加到对应的ZKDatabase(org.apache.zookeeper.server.ZKDatabase)中进行持久化存储,同时将自己NIOServerCnxn做为一个Watcher callback,监听服务端事件变化

3、Leader通过投票通过了某次Znode变化的请求后,然后通知对应的Follower,Follower根据自己内存中的zkDataBase信息,发送notification信息给zookeeper客户端

4、Zookeeper客户端接收到notification信息后,找到对应变化path的watcher列表,挨个进行触发回调。


设置观察操作

  • 设置观察的操作:exists,getChildren,getData
  • 触发观察的操作:create,delete,setData

节点ACL & 节点信息

zookeeper提供控制节点访问权限的功能,用于有效的保证zookeeper中数据的安全性。避免误操作而导致系统出现重大事故。

操作权限:CREATE / READ / WRITE / DELETE / ADMIN

身份认证方式:world(所有人)、auth(认证通过用户)、digest(用户名密码)、ip(IP地址认证)


cversion :子节点的版本号
aclVersion:表示acl的版本号,修改节点权限
dataVersion:表示的是当前节点数据的版本号

czxid:节点被创建时的事务ID
mzxid:节点最后一次被更新的事务ID
pzxid:当前节点下的子节点最后一次被修改时的事务ID

选举机制

zookeeper的节点有两种类型,持久节点跟临时节点。

临时节点有个特性,就是如果注册这个节点的机器失去连接(通常是宕机),那么这个节点会被zookeeper删除。

选主过程

  1. 在服务器启动的时候,去zookeeper特定的一个目录下注册一个临时节点(这个节点作为master,谁注册了这个节点谁就是master)
  2. 注册的时候,如果发现该节点已经存在,则说明已经有别的服务器注册了(也就是有别的服务器已经抢主成功),那么当前服务器只能放弃抢主,作为从机存在。
  3. 抢主失败的当前服务器需要订阅该临时节点的删除事件,以便该节点删除时(也就是注册该节点的服务器宕机了或者网络断了之类的)进行再次抢主操作。
  4. 从机具体需要去哪里注册服务器列表的临时节点,节点保存什么信息,根据具体的业务不同自行约定。选主的过程,其实就是简单的争抢在zookeeper注册临时节点的操作,谁注册了约定的临时节点,谁就是master。

 
 

参考:
https://www.cnblogs.com/felixzh/p/5869212.html
https://www.cnblogs.com/leesf456/p/6103870.html
https://blog.csdn.net/z69183787/article/details/53023578
https://blog.csdn.net/wuhenzhangxing/article/details/52936040
https://www.cnblogs.com/nevermorewang/p/5611807.html

猜你喜欢

转载自blog.csdn.net/Francis123580/article/details/82254317
今日推荐