【Windows】Zookeeper单机部署

下载Zookeeper

zookeeper 从 3.5 版本以后,命名就发生了改变,如果是 apache-zookeeper-3.5.5.tar.gz 这般命名的,都是未编译的,而 apache-zookeeper-3.5.5-bin.tar.gz 这般命名的,才是已编译的包

如果使用未编译的包,在启动 bin 目录下的 zkServer.cmd(Windows) 文件时会闪退,查看错误信息,提示如下:

找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain

下载地址:http://archive.apache.org/dist/zookeeper/

 这里我们下载的版本是3.5.5。

Zookeeper配置

将zoo_sample.cfg拷贝一份, 命名为zoo.cfg

打开zoo.cfg,内容如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=../datas/
# log dir
dataLogDir=../logs/
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

常用的配置项

#ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime
tickTime=2000

#Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。
#Leader允许F在 initLimit时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。
#如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数
initLimit=10

#在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。
#如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。
#注意:不要把这个参数设置得过大,否则可能会掩盖一些问题
syncLimit=5

#存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能
dataDir=/app/zk-data

#事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。
dataLogDir=/app/zk-logs

#客户端连接server的端口,即对外服务端口,默认为2181
clientPort=2181

#单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。
#请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,
#也不是单台ZK对所有客户端的连接数限制
maxClientCnxns=60

#集群的server列表 2888为选举端口,3888为心跳端口
server.1=xx.xxx.xxx.xx:2888:3888
server.2=xx.xxx.xxx.xx:2888:3888
server.3=xx.xxx.xxx.xx:2888:3888

启动Zookeeper

双击bin/zkServer.cmd,即启动Zookeeper服务端

采用zkCli去连接Zookeeper

zkCli.cmd -server 127.0.0.1:2181 # 指定连接节点

连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息,便可以使用命令与ZK服务进行交互了。比如:

  • help:帮助命令,查看ZK支持的所有命令
  • quit:退出客户端
  • ls path:查看目录下的节点
  • ls -s path:查看目录下的节点和状态信息
  • stat:它是status单词的缩写,主要是查看节点的状态信息。

常见操作命令

ls命令

查看目录下的节点信息

ls [-s] [-w] [-R] path
  • -s:显示节点详情,包括状态信息
  • -w:添加一个watch监视器
  • -R:列举出节点的级联节点
  • path:显示某目录下节点/文件

stat命令

查看节点状态

stat [-w] path
  • -w:添加watch
  • path:查看某目录下节点的状态

create命令

创建节点,默认持久节点

create [-s] [-e] [-c] [-t ttl] path [data] [acl]
  • -s:有序节点
  • -e:临时节点,不加默认是持久节点
  • -t ttl:带过期时间节点,比如:create ‐t 10 /ttl

Znode一般分为 4种类型:

  • 持久的(persistent)
  • 临时的(ephemeral)
  • 持久有序的(persistent_sequential)
  • 临时有序的(ephemeral_sequential)

1)创建持久节点

create /p_node1

2)创建临时节点

create -e /p_node1/e_node1
create -e /p_node1/e_node2 "node data"

临时节点,ephemeralOwner 字段状态不为空

3)创建顺序节点

注意:可设置的节点路径会被重命名为序列数。不设置时节点序列数前缀0开始

[zk: 192.168.198.110:2181(CONNECTED) 13] create -s /p_node2/
Node does not exist: /p_node2/
[zk: 192.168.198.110:2181(CONNECTED) 15] create  /p_node2
Created /p_node2
[zk: 192.168.198.110:2181(CONNECTED) 16] create -s  /p_node2/
Created /p_node2/0000000000
[zk: 192.168.198.110:2181(CONNECTED) 17] create -s  /p_node2/
Created /p_node2/0000000001
[zk: 192.168.198.110:2181(CONNECTED) 18] create -s  /p_node2/seq_
Created /p_node2/seq_0000000002
[zk: 192.168.198.110:2181(CONNECTED) 19] create -s  /p_node2/seq_
Created /p_node2/seq_0000000003

4)创建ttl节点

create ‐t 过期时间 /节点路径 节点数据

默认禁用,需要在 zoo.cfg中添加 extendedTypesEnabled=true 开启。 注意:ttl不能用于临时节点 。

[zk: 192.168.198.110:2181(CONNECTED) 25] create -t 10 /p_node1/ttl_node
KeeperErrorCode = Unimplemented for /p_node1/ttl_node

[zk: 192.168.198.110:2181(CONNECTED) 27] ls -R /p_node1
/p_node1
/p_node1/e_node1
/p_node1/e_node2

set命令

修改节点内容

set [-s] [-v version] path data
  • -s:更新节点数据并显示节点状态信息
  • -v 指定数据版本号,如果指定的数据版本号和数据当前版本号不一致,则更新失败。
[zk: 192.168.198.110:2181(CONNECTED) 36] set /p_node1/e_node1 "set data1"
[zk: 192.168.198.110:2181(CONNECTED) 37] set -s /p_node1/e_node1 "set data2"
cZxid = 0x6c
ctime = Fri May 13 09:55:49 UTC 2022
mZxid = 0x80
mtime = Fri May 13 10:15:46 UTC 2022
pZxid = 0x6c
cversion = 0
dataVersion = 6
aclVersion = 0
ephemeralOwner = 0x100002513c80001
dataLength = 9
numChildren = 0

get命令

获取节点/文件内容

get [-s] [-w] path
  • -s:查看节点数据以及节点状态信息
  • -w 添加一个watch,节点数据变更时,会通知客户端(通知是一次性的)。
[zk: 192.168.198.110:2181(CONNECTED) 38] get /p_node1/e_node1
set data2
[zk: 192.168.198.110:2181(CONNECTED) 39] get -s /p_node1/e_node1
set data2
cZxid = 0x6c
ctime = Fri May 13 09:55:49 UTC 2022
mZxid = 0x80
mtime = Fri May 13 10:15:46 UTC 2022
pZxid = 0x6c
cversion = 0
dataVersion = 6
aclVersion = 0
ephemeralOwner = 0x100002513c80001
dataLength = 9
numChildren = 0

删除节点

delete命令

只能删除没有子节点的节点。如果其有子节点时,无法删除。

delete [-v version] path

deleteall命令

级联删除该节点和子节点。

deleteall path [-b batch size]
 [zk: 192.168.198.110:2181(CONNECTED) 43] delete /p_node2/seq_0000000002
[zk: 192.168.198.110:2181(CONNECTED) 44] ls -R /p_node2
/p_node2
/p_node2/0000000000
/p_node2/0000000001
/p_node2/seq_0000000003
[zk: 192.168.198.110:2181(CONNECTED) 45] deleteall /p_node2
[zk: 192.168.198.110:2181(CONNECTED) 46] ls -R /p_node2
Node does not exist: /p_node2

监听命令

Zookeeper中一个常用的功能是 Watcher(事件监听器),它允许用户在指定节点上注册 Watcher(可针对感兴趣的事件注册监听),并且在一些感兴趣的特定事件发生的时候,Watcher会被触发,Zookeeper服务端会将事件通知到感兴趣的客户端上去,该机制是Zookeeper实现分布式协调服务的重要特性。

监听机制:客户端可以监听节点的变化,当节点发生改变时,将触发相应的事件。当事件被触发时,客户端会收到一个数据包,说明节点已经改变。

一次性监听

监听节点目录变化

监听节点的子节点变化,当子节点发生改变时触发。

#创建节点
[zk: 192.168.198.110:2181(CONNECTED) 13] create /watch_node
Created /watch_node
#监听节点目录变化
[zk: 192.168.198.110:2181(CONNECTED) 14] ls -w /watch_node
[]
[zk: 192.168.198.110:2181(CONNECTED) 15] create /watch_node/w1 data1

WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watch_node
Created /watch_node/w1
[zk: 192.168.198.110:2181(CONNECTED) 17] create /watch_node/w2 data2
Created /watch_node/w2

一次性监听,触发后会被删除,无法再次触发。

监听节点数据变化

当该节点数据发生改变时触发,子节点的数据变化不会触发。

# 监听节点数据变化
[zk: 192.168.198.110:2181(CONNECTED) 18] get -w /watch_node 
null
[zk: 192.168.198.110:2181(CONNECTED) 19] set /watch_node data

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node
[zk: 192.168.198.110:2181(CONNECTED) 20] set /watch_node data2

一次性监听,触发后会被删除,无法再次触发。

永久监听

在 Zookeeper 3.6.0版本之后,客户端可以在节点上创建永久监听,永久监听在被触发后不会被删除。

addWatch [-m mode] path

永久监听在创建时可以通过 -m 指定模式,模式分为两种:

  • PERSISTENT
  • PERSISTENT_RECURSIVE,不指定默认使用 PERSISTENT_RECURSIVE模式。

PERSISTENT

该节点的数据变化以及子节点的变化会触发相应事件,子节点的数据变化不会触发。

[zk: 192.168.198.110:2181(CONNECTED) 29] create /watch_node2
# 监听节点 PERSISTENT   
[zk: 192.168.198.110:2181(CONNECTED) 30] addWatch -m PERSISTENT /watch_node2   
[zk: 192.168.198.110:2181(CONNECTED) 31] set /watch_node2 data1

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node2
[zk: 192.168.198.110:2181(CONNECTED) 32] create /watch_node2/w1 data

WATCHER::Created /watch_node2/w1


WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watch_node2
#子节点的数据变化不会触发
[zk: 192.168.198.110:2181(CONNECTED) 33] set /watch_node2/w1 data1
[zk: 192.168.198.110:2181(CONNECTED) 34] delete /watch_node2/w1

WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watch_node2

PERSISTENT_RECURSIVE

该节点的数据变化以及所有子孙节点的目录或者数据变化都会触发相应事件。

[zk: 192.168.198.110:2181(CONNECTED) 39] create /watch_node3
# 监听节点 PERSISTENT_RECURSIVE  
[zk: 192.168.198.110:2181(CONNECTED) 40] addWatch -m PERSISTENT_RECURSIVE /watch_node3
[zk: 192.168.198.110:2181(CONNECTED) 41] set /watch_node3 data1

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node3
[zk: 192.168.198.110:2181(CONNECTED) 42] create /watch_node3/w1 

WATCHER::

WatchedEvent state:SyncConnected type:NodeCreated path:/watch_node3/w1
Created /watch_node3/w1
#子节点的数据变化也会触发
[zk: 192.168.198.110:2181(CONNECTED) 43] set /watch_node3/w1 data1
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node3/w1

[zk: 192.168.198.110:2181(CONNECTED) 44]  delete /watch_node3/w1

WATCHER::

WatchedEvent state:SyncConnected type:NodeDeleted path:/watch_node3/w1

可视化工具 ZooInspector 

1)下载ZooInspector压缩包:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

2)解压文件,然后双击 build 目录下的 zookeeper-dev-ZooInspector.jar 可执行文件运行程序

3)启动 ZooInspector 后,点击左上角的绿色按钮,输入 ZK Server 的连接地址即可发起连接。

4)连接成功后就能看到 ZK 服务器的节点数据信息。

注意事项:

1)此工具能新增节点(默认为不带序列的永久节点,无法新增临时节点以及带序列节点)、删除节点、修改节点、查询节点

2)此工具对中文不友好,如果节点值是中文,则会乱码,同理如果用它创建节点,同时设置的值是中文,其它客户端读到的值就会乱码,显然就是编码不一致引起的。

3)节点值被其它客户端修改之后,此工具都能实时看到。

 

posted @ 2022-03-26 22:21  残城碎梦  阅读(21)  评论(0编辑  收藏  举报