笔记 - Zookeeper 3.x(命令、配置、重要图示、脚本、代码实现)
作者: Zzay
目的: 记录
Zookeeper相关笔记(常用命令、常用配置、重要图示、常用脚本、代码实现),以方便未来查看使用。
1. 常用命令
以下包含
Zookeeper相关的常用命令。(zroot:/opt/module/zookeeper-3.7.0)
1.1 Server
-
start/stop: 启动/停止 Zookeeper server。$ bin/zkServer.sh start/stop -
status: 查看当前 server 的状态。$ bin/zkServer.sh status
1.2 Client
-
zroot/bin/zkCli.sh: 启动 Zookeeper 客户端。【】# 启动Zookeeper客户端 $ bin/zkCli.sh -server <serverInfo> # 启动Zookeeper客户端,并连接到指定的server $ bin/zkCli.sh -server <serverInfo> -
help: 显示所有操作命令。 -
ls <path>: 查看当前 znode 的子节点(可监听)。-w:监听子节点变化。-s:附加次级信息。
[zk: hadoop102:2181(CONNECTED) 5] ls -s / [zookeeper]cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1附加信息介绍:
-
czxid:创建结点的事务zxid。每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务ID。事务ID 是 ZooKeeper 中所有修改总的次序。每次修改都有唯一的
zxid,如果 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之前发生。 -
ctime:znode 被创建的毫秒数(从 1970 年开始)。 -
mzxid:znode 最后更新的事务zxid。 -
mtime:znode 最后修改的毫秒数(从 1970 年开始)。 -
pZxid:znode 最后更新的子节点zxid。 -
cversion:znode 子节点变化号,znode 子节点修改次数。 -
dataversion:znode 数据变化号。 -
aclVersion:znode 访问控制列表的变化号。 -
ephemeralOwner:如果是临时节点,这个是 znode 拥有者的 session id。如果不是临时节点则是 0。 -
dataLength:znode 的数据长度。 -
numChildren:znode 子节点数量。
-
create: 普通创建。-s:含有序列。-e:临时(重启或者超时消失)。
-
get <path>: 获取结点的值(可监听)。-w:监听节点内容变化。-s:附加次级信息。
-
set: 设置结点的具体值。 -
stat: 查看结点状态。 -
delete: 删除结点。 -
deleteall: 递归删除结点。
2. 常用配置
以下包含
Zookeeper相关的常用配置。(zroot:/opt/module/zookeeper-3.7.0)
-
zroot/conf/zoo.cfg: 包括大部分 zookeeper 的相关配置信息。-
tickTime: 通信心跳时间,Zookeeper 服务器与客户端心跳时间,单位毫秒。# 通信心跳时间 tickTime=2000 -
initLimit: LF 初始通信时限。Leader 和 Follower 初始连接时能容忍的最多心跳数(tickTime的数量)# LF初始通信时限 initLimit=10 -
syncLimit: LF 通信时限。Leader 和 Follower 之间通信时间如果超过 syncLimit * tickTime,则 Leader 认为 Follower 死亡,并从服务器列表中删除 Follower 。# LF通信时限 syncLimit=5 -
**
dataDir:**配置临时数据文件的存放路径,是必须自定义的配置。通常我们会在zroot下创建一个文件夹,以存放临时数据文件。# 存放临时数据文件 dataDir=/opt/module/zookeeper-3.7.0/zkData -
clientPort: 客户端连接端口,通常不做修改。# 客户端连接端口 clientPort=2181 -
server 集群配置: 配置集群中各个 server 的信息 [ server.A=B:C:D ] 。
- A:一个数字,表示这个 server 是第几号服务器,Zookeeper 启动时读取
myid文件,将其中的数据与zoo.cfg的配置信息比较,从而判断该服务器是哪个 server 。 - B:该 server 的地址(IP 或 配置好的名字)。
- C:该 server 的 Follower 与集群中的 Leader server 交换信息的端口。
- D:当集群中的 Leader server 挂机后执行选举时,该 server 与其他 server 相互通信的端口。
# server信息格式 server.A=B:C:D # 举例 server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888 - A:一个数字,表示这个 server 是第几号服务器,Zookeeper 启动时读取
-
-
zroot/zkData/myid文件: 我们需要在
zkData文件夹中创建myid,文件名不能修改,后续系统需要到该文件进行 server 编号匹配。 该文件中存放的内容为该服务器的 server 编号。
# 表示该server的编号为100 100
3. 重要图示
以下包含
Zookeeper相关的重要图示。
3.1 概念
3.2 应用场景
3.3 选举机制
3.4 监听器
-
监听器原理:
注意:注册一次,只能监听一次。想再次监听,需要再次注册。
- 结点的值变化监听:
get -w- NodeDataChanged 。 - 结点的子结点变化监听(路径变化):
ls -w- NodeChildrenChanged 。

- 结点的值变化监听:
3.5 C/S通信交互
3.6 分布式锁
4. 常用脚本
以下包含使用
Zookeeper过程中常用的脚本实现。
-
Zookeeper 集群启动停止脚本:
#!/bin/bash case $1 in "start"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 启动 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start" done };; "stop"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 停止 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop" done };; "status"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 状态 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status" done };; esac
5. Curator 框架
以下介绍
Curator框架在 Zookeeper 中的应用。详情请查看官方文档:https://curator.apache.org/index.html
5.1 介绍
Curator是一个专门解决分布式锁的框架,解决了原生 Java API 开发分布式时遇到的问题。- 原生 Java API 开发分布式存在的问题:
- 会话连接是异步的,需要自己去处理。比如使用
CountDownLatch。 - Watch 需要重复注册,不然就不能生效。
- 开发的复杂性还是比较高的。
- 不支持多节点删除和创建。需要自己去递归。
- 会话连接是异步的,需要自己去处理。比如使用
5.2 实操案例
6. 面试重点
以下包括在企业面试中关于
Zookeeper的常见问题。

本文详细记录了Zookeeper的常用命令,如启动/停止服务器、客户端操作,以及Zookeeper配置如tickTime、dataDir等。此外,还介绍了Zookeeper的集群配置、工作原理、数据结构、选举机制和监听器。同时,文章涵盖了Zookeeper在统一命名服务、配置管理、集群管理等场景的应用,并提供了Zookeeper集群启动停止的脚本。最后,简述了Curator框架在简化Zookeeper开发中的作用,以及解决的原生API问题。














1095

被折叠的 条评论
为什么被折叠?



