了解Zookeeper

Zookeeper基础

Zookeeper并不直接暴露原语,暴露了由一小部分调用方法组成的类似文件系统的API,我们通常使用菜谱来表示这些原语的实现。菜谱包括Zookeeper操作和维护的一个小型的数据节点,这些节点被称为znode,采用类似于文件系统的层级树状结构进行管理

  • /workers节点作为父节点,其下每个znode子节点保存了系统中一个可用节点的信息
  • /tasks节点作为父节点,其下每个znode子节点保存了所有已经创建并等待从节点执行任务的信息,主从模式应用的客户端在/tasks下添加一个znode子节点用来表示一个新的任务,并且等待任务状态的znode节点
  • /assign节点作为父节点,其下每个znode子节点保存了分配到某个从节点的一个任务信息,当主节点为从节点分配了一个任务,就会在/assign下增加一个子节点

znode类型

  • 持久的:为应用保存一些数据
  • 临时的:传达应用某些方面的信息,仅当创建者的会话有效时,这些细腻些必须有效保存
  • 持久有序的
  • 临时有序的

为了替换客户端的轮询,Zookeeper选择了基于通知的机制:客户端向Zookeeper注册需要接收通知的znode,通过对znode设置监视点来接收通知。监视点是一个单次触发的操作,意在监视点会触发一个通知

通知机制的一个重要保障是,对同一个znode的操作,先向客户端传送通知,然后再对该节点进行变更,如果客户端对一个znode设置了监视点,而该znode发生了两次连续更新

每一个znode都有一个版本号,它随每次数据变化而自增。两个API操作可以有条件的执行:setData和delete。这两个调用以版本号作为传入参数,只有当转入参数的版本号一致时才会调用成功

Zookeeper架构

Zookeeper服务器端运行于两种模式下:独立模式和仲裁模式

仲裁模式下可以容许f个服务器的崩溃,在这里f为小于集合中服务器数量的一半

会话(session)
在对Zookeeper集合执行任何请求前,一个客户端必须先与服务器建立会话。当一个会话因为某种原因而中止时,在这个会话期间创建的临时节点将会消失,当会话无法与当前连接的服务器继续通信时,会话就可能转移到另外一个服务器上。Zookeeper客户端透明的转移一个会话到不同的服务器。

一个会话的主要可能状态大多是简单明了的:CONNECTING,CONNECTED,CLOSED和NOT_CONNECTDED。状态的转换依赖发生在客户端与服务之间的各种事件:

  • 一个会话从NOT_CONNECTED开始,当Zookeeper客户端初始化完成后转换到CONNECTING状态
  • 正常情况下,成功与Zookeeper服务器建立连接后,会话转换到CONNECTED状态。
  • 当客户端与Zookeeper服务器断开连接后或者无法收到服务器响应时,它就会转换到CONNECTING状态并尝试发现其他Zookeeper服务器
  • 如果可以发现另外一个服务器或重连到原来的服务器,当服务器确认会话有效后,状态又转换回CONNECTED状态。否则,它将声明会话过期,然后转换到CLOSED状态

注意:发生网络分区时等待CONNECTING
如果一个客户端与服务器因超时而断开连接,客户端仍然保持CONNECTING状态,如果因为网络分区问题导致客户端与Zookeeper集合被隔离而发生连接断开,那么其状态将一直保持,直到显示的关闭了这个会话,或者分区问题修复后,客户端能够获悉Zookeeper服务器发送的会话已经过期。发生这种行为是因为Zookeeper集合对声明会话超时负责,而不是客户端负责。

Zookeeper设置超时参数t,如果经过时间t之后服务接收不到这个会话的任何消息,服务就会声明会话过期。而在客户端,如果经过t/3时间客户端未收到任何消息,客户端向服务端发生心跳消息。在经过2t/3的时间后,Zookeeper客户端开始寻找其他的服务器。此时还有t/3时间寻找

客户端在选择连接服务器时,应用需要传递可用的服务器列表给客户端,告知客户端可以选择一个服务器进行连接

关于zkid(事务标识符):当尝试连接到一个不同的服务器时,非常重要的是,这个服务器的Zookeeper状态要与最后连接的服务器的Zookeeper状态保持最新。Zookeeper确保每一个变化相当于其他已执行的更新是完全有序的,因此,如果一个客户端在位置i观察到一个更新,它就不能连接到i1<i的服务器上

stat命令可以得到一个znode的节点属性,通过stat命令设置监听。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值