当前位置:   article > 正文

查看zookeeper版本_一文入门ZooKeeper

查看zk版本

1. ZooKeeper: 分布式应用程序协调服务(A Distributed Coordination Service for Distributed Application)

ZooKeeper特性

  • 序列一致性(Sequential Consistency):那客户端发送顺序有序更新
  • 原子性(Atomicity):更新要么成功,要么失败。没有中间状态。
  • 单一系统镜像(Single System Image):无论连接到哪台服务器,客户端都会看到相同的服务视图
  • 可靠性(Reliability):应用更新后,它将从该时间开始持续,直到客户端覆盖更新。
  • 实时性(Timeliness):系统的客户端视图保证在特定时间范围内是最新的。

2.体系结构

客户端与服务端结构

705a9479a426ea8dbdd5e4ae2d66f7f0.png

ZooKeeper Service

  • 服务器端节点有leader,follower和observer三种角色
  • 读写分离,Leader写和读,follower和observer读。
  • leader:集群的核心,起到了主导整个集群的作用,事务请求的调度和处理。
  • follower:处理客户端的非事务请求,转发事务请求,参与事务的投票过程,参与leader选举投票。
  • observer:观察者角色,了解集群中的状态变化,进行状态同步。可以响应非事务请求。observer与follwer工作原理一致,区别是不参与事务请求的投票,投票会影响性能。当引入更多节点提升性能时候,多投票,多网络请求,但observer可以在不投票不增加网络请求的情况下提升读性能,所以引入了observer。
711c76ad60f026920e26d0cb16f602a0.png

Zookeeper服务器端角色

3.ZooKeeper的文件系统

如下图所示,

594c66d651562618abf16c7f178e2d95.png

ZNode层次结构

  • ZooKeeper的命名空间类似于标准文件系统。名称是由斜杠(/)分隔的路径,所以znode名称也称为path。
  • ZooKeeper命名空间中的每个节点都由路径标识,这些节点被称为znode。其中znode /表示根节点。
  • 与标准文件系统不同,ZooKeeper命名空间中的每个节点(znode)都可以(也可空)包含与之关联的数据以及子项。
  • Znodes维护一个stat结构,其中包括数据更改,ACL更改和时间戳的版本号,以允许缓存验证和协调更新。每次znode的数据更改时,版本号都会增加。
  • 每个znode的数据以原子方式读取和写入。
  • 每个znode都有一个访问控制列表(ACL),限制谁可以做什么。

znode类型

从持久状态来分,znode分为持久节点和临时节点;从编号来分,znode分为普通(无编号)节点和有编号节点。

两两组合即组成以下四种节点类型:

  • 持久节点:Client断开与Server的连接(Session断开)不会消失
  • 临时节点(Ephemeral Nodes):Session断开会消失
  • 持久有编号节点:Session断开不会消失,创建节点时会在path后添加编号,如0000000001
  • 临时有编号节点:Session断开会消失,创建节点时会在path后添加编号
a852d5740e0951896d944587bc05bc92.png

ZNode类型

:编号是单调递增的计数器。 此计数器对于父znode是唯一的。 计数器是带有0填充的10位数,范围0000000000~2147483647。

4.简单配置

  • zookeeper安装目录的conf目录下面的zoo_sample.cfg是配置模板文件,建议不要直接修改该文件cp zoo_sample.cfg zoo.cfg。
  • zoo.cfg下面默认有五个属性,他们分别是:
  • tickTime:客户端和服务端通信心跳时间
  • initLimit:follower与leader之间初始连接时能容忍的最多心跳数(tickTime的数量)。
  • syncLimit:flower跟leader之间的请求和应答最多能容忍的心跳数。
  • dataDir:每台server,在该目录下创建myid文件,myid内容仅有一行,标注server.id中的id。不要使用/tmp作为dataDir;myid内容不要有空格和换行。
  • clientPort:默认2181
  • 配置文件中添加server,如下所示
# server.中的id这个数字需要和myid中的数字对应# hadoop01:server域名# 2888:server内部通讯端口# 3888:选举端口server.1=hadoop01:2888:3888server.2=hadoop02:2888:3888server.3=hadoop03:2888:3888

5.CLI基本操作

# 启动serverzkServer.sh start# client连接serverzkCli.sh  -server ip:2181# 连接后,可以输入'h'查看所有cli命令
6b0bd0b08059d457703ab86a1bc00f53.png

ZooKeeper CLI命令

Cli主要命令

  • ls path:查看某个节点下的所有子节点信息
  • stat path:获取指定节点的状态信息
  • get path:获取当前节点的数据内容
  • ls2 path:是ls 和 stat两个命令的结合
  • set path data [version]:修改当前节点的数据内容。如果指定版本,需要和当前节点的数据版本一致
  • delete path [version]:删除指定路径的节点 如果有子节点要先删除子节点
  • rmr path:删除当前路径节点及其所有子节点
  • connect host:port和 close:在当前连接中连接其他的ZooKeeper服务器和关闭服务器
  • setquota -n|-b val path:设置节点配额(比如限制节点数据长度,限制节点中子节点个数)。-n 是限制子节点个数,-b是限制节点数据长度。超出配额后,ZooKeeper不会报错,而是在日志信息中记录。
  • listquota path:查看路径节点的配额信息
  • delquota [-n|-b] path:删除节点路径的配额信息
  • history 和 redo cmdno:查看客户端这次会话所执行的所有命令 和 执行指定历史命令
  • quit:退出客户端

stat显示的znode信息

  • czxid:创建该节点的事物ID
  • ctime:创建该节点的时间
  • mZxid:更新该节点的事物ID
  • mtime:更新该节点的时间
  • pZxid:操作当前节点的子节点列表的事物ID(这种操作包含增加子节点,删除子节点)
  • cversion:当前节点的子节点版本号
  • dataVersion:当前节点的数据版本号
  • aclVersion:当前节点的acl权限版本号
  • ephemeralowner:当前节点的如果是临时节点,该属性是临时节点的事物ID
  • dataLength:当前节点的d的数据长度
  • numchildren:当前节点的子节点个数

6.Watch文件监听

一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

一个zk的节点可以被监控,包括这个目录中存储的数据的修改,子节点目录的变化,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。

  • 可以注册watcher的方法:getData、exists、getChildren。
  • 可以触发watcher的方法:create、delete、setData。连接断开的情况下触发的watcher会丢失。
  • 一个Watcher实例是一个回调函数,被回调一次后就被移除了。如果还需要关注数据的变化,需要再次注册watcher。
0d188691abe0dc7115fb20aeb3203bb3.png

触发操作及其触发事件

ee4bd0b98f4f146bf92a98f3747c4eae.png

事件类型和注册Watcher的对应关系

7.应用场景

ZooKeeper特性使用和组合,主要有以下五大应用场景:

  • 命名服务:持久节点+NodeCreateEvent
  • 配置管理:有value的持久节点+NodaDataChangedEvent
  • 集群管理
  • 选主:临时节点+
  • 增删节点:临时节点+NodeCreateEvent,NodeDeleteEvent
  • 分布式锁
  • 读锁(共享锁):临时有编号节点
  • 写锁(排它锁):临时节点
  • 时序锁:有编号节点
  • 消息队列
  • 同步队列:有编号节点
  • FIFO
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号