了解 Zookeeper 基本原理、应用场景(二)

目录

⑤ ZooKeeper 数据模型 znode 结构详解

数据模型

Znode 的状态属性

⑥ Zookeeper session 基本原理

Session 的创建

Session 的状态

会话超时管理(分桶策略+会话激活)

⑦ Zookeeper 客户端基础命令使用

ls 命令

ls2 命令

get 命令

stat 命令

create 命令

set 命令

delete 命令

⑧ Zookeeper 四字命令

四字命令使用

stat 命令

ruok 命令

dump 命令

conf 命令

cons 命令

envi 命令



 

⑤ ZooKeeper 数据模型 znode 结构详解

数据模型

在 zookeeper 中,可以说 zookeeper 中的所有存储的数据是由 znode 组成的,节点也称为 znode,并以 key/value 形式存储数据。

整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。

进入 zookeeper 安装的 bin 目录,通过sh zkCli.sh打开命令行终端,执行 "ls /" 命令显示:

$ ls /
$ ls /zookeeper
$ ls /zookeeper/quota

Znode 的状态属性

cZxid创建节点时的事务ID
ctime创建节点时的时间
mZxid最后修改节点时的事务ID
mtime最后修改节点时的时间
pZxid表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID(注意,只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid)
cversion子节点版本号,子节点每次修改版本号加1
dataversion数据版本号,数据每次修改该版本号加1
aclversion权限版本号,权限每次修改该版本号加1
ephemeralOwner创建该临时节点的会话的sessionID。(**如果该节点是持久节点,那么这个属性值为0)**
dataLength该节点的数据长度
numChildren该节点拥有子节点的数量(只统计直接子节点的数量)

⑥ Zookeeper session 基本原理

客户端与服务端之间的连接是基于 TCP 长连接,client 端连接 server 端默认的 2181 端口,也就是 session 会话。

从第一次连接建立开始,客户端开始会话的生命周期,客户端向服务端的ping包请求,每个会话都可以设置一个超时时间。

Session 的创建

sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建会话的时候,zookeeper 都会为其分配一个全局唯一的 sessionID。zookeeper 创建 sessionID 类 SessionTrackerImpl 中的源码。

Timeout:会话超时时间。客户端在构造 Zookeeper 实例时候,向服务端发送配置的超时时间,server 端会根据自己的超时时间限制最终确认会话的超时时间。

TickTime:下次会话超时时间点,默认 2000 毫秒。可在 zoo.cfg 配置文件中配置,便于 server 端对 session 会话实行分桶策略管理

isClosing:该属性标记一个会话是否已经被关闭,当 server 端检测到会话已经超时失效,该会话标记为"已关闭",不再处理该会话的新请求。

Session 的状态

下面介绍几个重要的状态:

  • connecting:连接中,session 一旦建立,状态就是 connecting 状态,时间很短。

  • connected:已连接,连接成功之后的状态。

  • closed:已关闭,发生在 session 过期,一般由于网络故障客户端重连失败,服务器宕机或者客户端主动断开。

会话超时管理(分桶策略+会话激活)

zookeeper 的 leader 服务器再运行期间定时进行会话超时检查,时间间隔是 ExpirationInterval,单位是毫秒,默认值是 tickTime,每隔 tickTime 进行一次会话超时检查。

ExpirationTime 的计算方式:

ExpirationTime = CurrentTime + SessionTimeout;
ExpirationTime = (ExpirationTime / ExpirationInterval + 1) * ExpirationInterval;

在 zookeeper 运行过程中,客户端会在会话超时过期范围内向服务器发送请求(包括读和写)或者 ping 请求,俗称心跳检测完成会话激活,从而来保持会话的有效性。

会话激活流程:

激活后进行迁移会话的过程,然后开始新一轮:


⑦ Zookeeper 客户端基础命令使用

zookeeper 命令用于在 zookeeper 服务上执行操作。

首先执行命令,打开新的 session 会话,进入终端。

$ sh zkCli.sh

下面开始讲解基本常用命令使用,其中 acl 权限内容在后面章节详细阐述。

ls 命令

ls 命令用于查看某个路径下目录列表。

格式:

ls path
  • path:代表路径。

ls2 命令

ls2 命令用于查看某个路径下目录列表,它比 ls 命令列出更多的详细信息。

格式:

ls2 path
  • path:代表路径。

get 命令

get 命令用于获取节点数据和状态信息。

格式:

get path [watch]
  • path:代表路径。
  • [watch]:对节点进行事件监听。

stat 命令

stat 命令用于查看节点状态信息。

格式:

stat path [watch]
  • path:代表路径。
  • [watch]:对节点进行事件监听。

create 命令

create 命令用于创建节点并赋值。

格式:

create [-s] [-e] path data acl
  • [-s] [-e]:-s 和 -e 都是可选的,-s 代表顺序节点, -e 代表临时节点,注意其中 -s 和 -e 可以同时使用的,并且临时节点不能再创建子节点。
  • path:指定要创建节点的路径,比如 /runoob
  • data:要在此节点存储的数据。
  • acl:访问权限相关,默认是 world,相当于全世界都能访问。

set 命令

set 命令用于修改节点存储的数据。

格式:

set path data [version]
  • path:节点路径。
  • data:需要存储的数据。
  • [version]:可选项,版本号(可用作乐观锁)。

delete 命令

delete 命令用于删除某节点。

格式:

delete path [version]
  • path:节点路径。
  • [version]:可选项,版本号(同 set 命令)。

⑧ Zookeeper 四字命令

zookeeper 支持某些特定的四字命令与其交互,用户获取 zookeeper 服务的当前状态及相关信息,用户在客户端可以通过 telenet 或者 nc(netcat) 向 zookeeper 提交相应的命令。

安装 nc 命令:

$ yum install nc                # centos
或
$ sudo apt install netcat       # ubuntu

四字命令格式:

echo [command] | nc [ip] [port]

ZooKeeper 常用四字命令主要如下:

四字命令功能描述
conf3.3.0版本引入的。打印出服务相关配置的详细信息。
cons3.3.0版本引入的。列出所有连接到这台服务器的客户端全部连接/会话详细信息。包括"接受/发送"的包数量、会话id、操作延迟、最后的操作执行等等信息。
crst3.3.0版本引入的。重置所有连接的连接和会话统计信息。
dump列出那些比较重要的会话和临时节点。这个命令只能在leader节点上有用。
envi打印出服务环境的详细信息。
reqs列出未经处理的请求
ruok测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应。
stat输出关于性能和连接的客户端的列表。
srst重置服务器的统计。
srvr3.3.0版本引入的。列出连接服务器的详细信息
wchs3.3.0版本引入的。列出服务器watch的详细信息。
wchc3.3.0版本引入的。通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表。
wchp3.3.0版本引入的。通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。
mntr3.4.0版本引入的。输出可用于检测集群健康状态的变量列表

参考官方链接:ZooKeeper: Because Coordinating Distributed Systems is a Zoo


四字命令使用

stat 命令

stat 命令用于查看 zk 的状态信息,实例如下:

$ echo stat | nc 192.168.3.38 2181

ruok 命令

ruok 命令用于查看当前 zkserver 是否启动,若返回 imok 表示正常。实例如下:

$ echo ruok | nc 192.168.3.38 2181

dump 命令

dump 命令用于列出未经处理的会话和临时节点。实例如下:

$ echo dump | nc 192.168.3.38 2181

conf 命令

conf 命令用于查看服务器配置。实例如下:

$ echo conf | nc 192.168.3.38 2181

cons 命令

cons 命令用于展示连接到服务器的客户端信息。实例如下:

$ echo cons | nc 192.168.3.38 2181

envi 命令

envi 命令用于查看环境变量。实例如下:

$ echo envi | nc 192.168.3.38 2181

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你可知这世上再难遇我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值