正文
基本概念
-
角色
zookeeper 集群中的节点共有三种角色,每个节点同时只能是一种角色。集群中的所有机器通过一个 Leader 选举过程来选定一台被称为 Leader 的机器。
Leader:接受所有 Follower 的提案请求并统一协调发起提案的投票,负责与所有的 Follower 进行内部的数据交换
Follower:直接为客户端服务并参与提案的投票,同时与 Leader 进行数据交换
Observer:直接为客户端服务但不参与提案的投票,同时也与 Leader 进行数据交换
-
会话
zookeeper 中客户端启动时会与服务器建立一个 TCP 连接,从第一次连接建立开始,客户端会话的生命周期就开始了,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向服务器发送请求并接受响应,还能够接收来自服务器的 watch 事件通知。
-
节点
一般在分布式语境下的节点是指组成集群的每一台服务器,在 zookeeper 中还有另外一层意思,称之为数据节点(ZNode)。
zookeeper 的整个名字空间的结构是层次化的,和 Linux 文件系统结构相似,是一颗树。名字空间的层次由斜杠(/)来进行分割,在名称空间里面的每一个节点的名字空间由这个结点的路径来确定。
每个 ZNode 上都会保存自己的数据内容,同时还会保存一系列属性信息。
-
版本
对于每个 ZNode ,zookeeper 都会为它维护一个叫 Stat 的数据结构,Stat 中记录了 ZNode 的三个数据版本,version(当前ZNode数据内容的版本号)、cversion(当前ZNode子节点的版本号)、aversion(当前ZNode的ACL变更版本号)
-
watcher
zookeeper 允许用户在指定节点上注册一些 watcher,并且在特定事件触发的时候,zookeeper 服务端会将事件通知到感兴趣的客户端,该机制是 zookeeper 实现分布式协调服务的重要特性。
客户端命令
这里列出常用的客户端命令,所谓客户端命令指使用 zkCli 连接到 zookeeper 服务器之后使用的命令,zkCli 连接的语法如下:
zkCli -server host:port cmd args
zkCli 是客户端可执行文件名,根据具体操作系统环境可能是 zkCli.sh 或 zkCli.cmd
host 是服务器IP或域名,port 是服务器端口号,如果有多个服务器地址则用逗号分隔
cmd 是具体命令、args 是命令的参数,也可以连接上服务器之后再执行命令。
-
查看节点
ls /path
查看名为 /path 的子节点,但只能查看指定节点下的第一级的所有子节点。
ls2 /path
查看名为 /path 的子节点,并且能看到更新次数等属性信息。
-
创建节点
create [-s] [-e] /path data
创建一个名叫 /path 的节点,并包含数据 data。加上 -s 表示创建的是顺序节点,加上 -e 表示创建的是临时节点,如果都不加则默认为创建持久节点。
-
删除节点
delete /path
删除名为 /path 的节点
-
设置节点数据
set /path data
设置名为 /path 的节点的数据为 data
-
返回节点数据
get /path
返回名为 /path 的节点的数据和属性信息
-
强制同步数据
sync /path
将名为 /path 的节点强制同步为最新的数据
-
帮助信息
help
帮助命令,显示客户端支持的命令及语法格式
-
退出
quit
退出当前客户端,会话结束。
运维命令
zookeeper 提供了一些四字命令用于获取 zookeeper 服务端的当前状态及相关信息,这些命令在系统运维时很有用。用户在客户端可以通过 telnet 或 nc 向zookeeper 提交相应的命令,比如 nc 方式:
echo cmd|nc host port
cmd 是具体的命令(因为一般是四个字母所以又叫做四字命令),host 是zookeeper 服务器 IP 地址或域名,port 是 zookeeper 端口号
-
conf
显示服务配置的详细信息,比如数据文件目录、日志文件目录、间隔单位时间、选举算法、选举端口等。
-
cons
列出所有连接到服务器的客户端的完全的连接/会话的详细信息。包括”接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等。
-
crst
重置所有连接。
-
dump
列出未经处理的会话和临时节点。
-
envi
显示关于服务器环境的详细信息,比如 zookeeper 版本、操作系统版本、jdk 地址等。
-
reqs
列出未经处理的请求。
-
ruok
测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。
-
stat
输出关于性能和连接的客户端的列表。