zookeeper命令整理

目录

一、概览

二、功能脚本

  2.1、zkServer状态管理

  2.2、zkCli客户端登录

三、数据操作命令

四、watch机制

  4.1、特点

  4.2、通知状态和事件类型

  4.3、watch示例

  

 

一、概览

  Zookeeper的命令,分为两类:

  一类是状态管理命令,比如启动Zk服务器、终止Zk服务器、查看Zk服务器状态..

  另一类就是操作Zk服务器中的数据,比如创建数据节点、删除数据节点、查看数据节点内容....

  下面将分别介绍。

 

二、功能脚本

2.1、zkServer状态管理

  Zookeeper的状态管理是通过运行zkServer.sh脚本来实现,在zookeeper安装目录的bin目录下。

  所有的操作如下:

zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

  使用方式如下:

# 启动当前的zk服务器
/usr/local/zookeeper/bin/zkServer.sh start

# 重启当前的zk服务器
/usr/local/zookeeper/bin/zkServer.sh restart

# 关闭当前的zk服务器
/usr/local/zookeeper/bin/zkServer.sh stop

# 查看当前的zk服务器运行状态
/usr/local/zookeeper/bin/zkServer.sh status

  

2.2、zkCli客户端登录

  当服务器端启动后,可以使用zkCli.sh(同样在zookeeper安装目录的bin目录下)实现。

  使用方式:

# 格式zkCli.sh -server ip:port
/usr/local/zookeeper/bin/zkCli.sh -server 192.168.1.3:2181

# 不指定-server,默认使用本机localhost:2181
/usr/local/zookeeper/bin/zkCli.sh

  

三、数据操作命令

  登录到zookeeper服务器后,输入任意字符,回车确认后就会出现很多命令:

[zk: 127.0.0.1:2181(CONNECTED) 0] info
ZooKeeper -server host:port cmd args
	stat path [watch]
	set path data [version]
	ls path [watch]
	delquota [-n|-b] path
	ls2 path [watch]
	setAcl path acl
	setquota -n|-b val path
	history 
	redo cmdno
	printwatches on|off
	delete path [version]
	sync path
	listquota path
	rmr path
	get path [watch]
	create [-s] [-e] path data acl
	addauth scheme auth
	quit 
	getAcl path
	close 
	connect host:port

  其实上面的命令列表已经很明显的展示了zookeeper中可以操作的命令,包括他的功能都比较容易理解,下面就简单说几个常用的命令

 

3.1、ls path

  查看path节点下有哪些子节点,不会显示孙子及以下层级的节点,示例如下:

[zk: 127.0.0.1:2181(CONNECTED) 3] ls /       
[zookeeper]

  

3.2、create path data

  该命令用来创建path节点,并且设置节点的值为data。需要注意的是,使用create创建path时,不能嵌套创建path,比如创建/abc/xyz,那么/abc必须是已经存在的,不能直接创建/abc/xyz。并且,使用create创建节点的时候,必须指定data,否则节点不会被创建。

[zk: 127.0.0.1:2181(CONNECTED) 4] create /abc xxxxxx
Created /abc
[zk: 127.0.0.1:2181(CONNECTED) 5] ls /
[abc, zookeeper]

  嵌套创建path时,如果上级目录不存在,则创建失败:

[zk: 127.0.0.1:2181(CONNECTED) 5] ls /
[abc, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 6] create /xyz/aaa 12345
Node does not exist: /xyz/aaa
[zk: 127.0.0.1:2181(CONNECTED) 7] create /xyz 123
Created /xyz
[zk: 127.0.0.1:2181(CONNECTED) 8] create /xyz/aaa 12345
Created /xyz/aaa

  使用create命令时,有-s和-e选项,分别表示Sequence(有序节点)、Ephemeral(临时节点),zookeeper默认的节点类型是无序、永久节点;

  无序是指一个节点下创建子节点时,子节点不会重复;

  永久是指并且如果不主动删除,那么节点就会一直存在;

  有序是指创建节点时,会在节点名称后面加一个10位长度的数字,表示其顺序(序号),可以创建相同的节点名称(但是序号不相同);

  临时是指创建的节点只在当前连接(session)有效,当连接断开后,临时节点就会被删除(可能会有几秒的延迟)。

  需要注意的是,不能在临时节点下创建子节点

# 无序、永久节点,不能重复创建
[zk: localhost:2181(CONNECTED) 1] create /abc 123
Created /abc
[zk: localhost:2181(CONNECTED) 2] create /abc 456
Node already exists: /abc

# 有序节点可以重复创建
[zk: localhost:2181(CONNECTED) 3] create -s /xyz 123
Created /xyz0000000001
[zk: localhost:2181(CONNECTED) 4] create -s /xyz 456
Created /xyz0000000002
[zk: localhost:2181(CONNECTED) 5] ls /
[xyz0000000001, abc, xyz0000000002, zookeeper]

 

3.3、get path

  该命令用来查看path节点上值以及节点信息,示例如下:

[zk: 127.0.0.1:2181(CONNECTED) 12] get /xyz
123
cZxid = 0x1f
ctime = Sun Jun 09 15:12:07 CST 2019
mZxid = 0x1f
mtime = Sun Jun 09 15:12:07 CST 2019
pZxid = 0x20
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1

  

3.4、set path data

  该命令用来对已经存在的path的data进行设置,需要注意的是,如果path不存在,那么set操作就会失败,示例如下:

[zk: 127.0.0.1:2181(CONNECTED) 13] set /xyz 321
cZxid = 0x1f
ctime = Sun Jun 09 15:12:07 CST 2019
mZxid = 0x22
mtime = Sun Jun 09 15:15:18 CST 2019
pZxid = 0x20
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1
[zk: 127.0.0.1:2181(CONNECTED) 14] set /www notExists   # path不存在,操作失败
Node does not exist: /www

  set命令可以有一个version可选项,表示要设置哪一个version的path:当要设置的path,对应的dataVersion为version时,才进行set操作,否则认为失败,因为version不同,表示要设置的path不匹配。  

 

3.5、delete path

  该命令用来删除叶子节点,叶子节点就是没有子节点的节点。如果删除path下面还有其他的子节点,那么删除操作就会失败。

[zk: 127.0.0.1:2181(CONNECTED) 19] ls /       
[xyz, abc, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 20] ls /xyz    
[aaa]
[zk: 127.0.0.1:2181(CONNECTED) 21] ls /xyz/aaa
[]
[zk: 127.0.0.1:2181(CONNECTED) 22] delete /xyz  # 删除的path包含子节点,删除失败
Node not empty: /xyz
[zk: 127.0.0.1:2181(CONNECTED) 23] delete /xyz/aaa # 删除的节点没有子节点,删除成功

  

3.6、rmr path

  该命令用来递归删除path,如果path下面有子节点,那么子节点都会被全部删除。

[zk: 127.0.0.1:2181(CONNECTED) 24] ls /xyz
[]
[zk: 127.0.0.1:2181(CONNECTED) 25] create /xyz/abc 3333
Created /xyz/abc
[zk: 127.0.0.1:2181(CONNECTED) 26] rmr /xyz

  

3.7、stat path

  用来获取path节点的相关信息,示例如下:

[zk: 127.0.0.1:2181(CONNECTED) 29] stat /abc
cZxid = 0x1d
ctime = Sun Jun 09 15:10:39 CST 2019
mZxid = 0x21
mtime = Sun Jun 09 15:13:30 CST 2019
pZxid = 0x1d
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

  

四、watch机制

  对于zookeeper目录树上的节点来说,我们可能需要关注某个节点,当节点发生变化时,需要触发一些事件,举个例子,当/user/Jane节点被删除时,通知客户端删除用户Jane,这就是watch机制(监听)。

 

4.1、watch机制的特点

  先注册后监听:对于节点的变化,需要先监听,当节点发生变化时,才会触发通知;

  一次性触发:watch后,只会触发一次通知,如果要每次都触发,那么就需要在触发watch的事件后,重新watch;

  异步通知:当事件触发后,通知时异步发给客户端的;

 

4.2、通知状态和事件类型

  在zookeeper中,可以对数据节点进行很多操作,比如删除、修改、增加子节点...在触发watch通知的时候,应该通知客户端哪个节点进行了什么操作。 

  通知状态包括三类:SyncConnected、Disconnected、Expired、AuthFailed

  每一个通知状态(KeeperState)下又有多种事件类型(EventType);

  SyncConnected

    None:客户端与服务器成功建立连接;

    NodeCreated:监听的节点被创建;

    NodeDeleted:监听的节点被删除;

    NodeDataChanged:监听的节点数据内容被修改;

    NodeChildChanged:监听的节点的子节点的节点数据内容发生改变;

  Disconnected

    None:客户端与服务器断开连接

  Expired

    None:会话超时

  AuthFailed

    None:鉴权失败

  

4.3、watch示例

   只有一部分zookeeper命令支持watch操作,可以通过查看zk的命令列表,后面有[watch]的命令才支持(只有stat、ls、ls2、get这四个命令支持)。

  

 

  有ls命令为例

  窗口1:单纯的使用ls,不加watch选项,就没有监听

[zk: 192.168.1.3:2181(CONNECTED) 2] ls /
[zookeeper]

  

  窗口2:登录到192.168.1.4上,新增节点/abc

[zk: 192.168.1.4(CONNECTED) 0] ls /
[zookeeper]
[zk: 192.168.1.4(CONNECTED) 1] create /abc 123
Created /abc

  新增节点/abc时,窗口1没有变化;

 

  窗口1:使用watch选项

[zk: 192.168.1.3:2181(CONNECTED) 3] ls /
[abc, zookeeper]
[zk: 192.168.1.3:2181(CONNECTED) 4] ls / watch
[abc, zookeeper]

  

  窗口2:创建/xyz节点

[zk: 192.168.1.4(CONNECTED) 2] create /xyz 456
Created /xyz

  观察窗口1,发现有其他信息输出,如下图

  

 

 

  窗口2:继续创建/opq节点

[zk: 192.168.1.4(CONNECTED) 3] create /opq 789
Created /opq

  观察窗口1,没有发现其他信息输出,说明watch操作只触发了一次。

  如果需要再次触发通知,就必须再次进行watch操作。

 

posted @ 2019-06-08 15:41  寻觅beyond  阅读(...)  评论(...编辑  收藏
顶部