0


Zookeeper生产常用命令大全(最新3.8.0版本)

文章目录

官方文档

https://zookeeper.apache.org/doc/r3.8.0/zookeeperCLI.html

在这里插入图片描述

一、服务端

zookeeper的shell命令都体现在

  1. apache-zookeeper-3.8.0-bin/bin/

目录下:

  1. bin ls
  2. README.txt zkEnv.sh zkSnapShotToolkit.sh
  3. zkCleanup.sh zkServer-initialize.sh zkSnapshotComparer.cmd
  4. zkCli.cmd zkServer.cmd zkSnapshotComparer.sh
  5. zkCli.sh zkServer.sh zkTxnLogToolkit.cmd
  6. zkEnv.cmd zkSnapShotToolkit.cmd zkTxnLogToolkit.sh

其中包括:

1> 启动zookeeper服务:

  • ./zkServer.sh start

2> 查看zookeeper服务状态:

  • ./zkServer.sh status

3> 停止zookeeper服务:

  • ./zkServer.sh stop

4> 重启zookeeper服务:

  • ./zkServer.sh restart

二、客户端

1、连接客户端

直接使用

  1. sh zkCli.sh

命令可以连接到本地的zookeeper服务(127.0.0.1:2181);如果需要连接到其他地址的zookeeper服务,需要使用以下命令格式:

  1. sh zkCli.sh -server[ip]:[port]

示例命令:

  1. sh zkCli.sh -server127.0.0.1:2181

也可以不指定IP:Port,而是直接连接到本地的zookeeper(即127.0.0.1:2181)

连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。 可以在开启的会话中做一些客户端操作 与 zookeeper服务进行交互;

2、help

使用 help命令来查看帮助

  1. [zk: 127.0.0.1:2181(CONNECTED)21]help
  2. ZooKeeper -server host:port -client-configuration properties-file cmd args
  3. addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
  4. addauth scheme auth
  5. close
  6. config [-c][-w][-s]
  7. connect host:port
  8. create [-s][-e][-c][-t ttl] path [data][acl]
  9. delete [-v version] path
  10. deleteall path [-b batch size]
  11. delquota [-n|-b|-N|-B] path
  12. get [-s][-w] path
  13. getAcl [-s] path
  14. getAllChildrenNumber path
  15. getEphemerals path
  16. history
  17. listquota path
  18. ls[-s][-w][-R] path
  19. printwatches on|off
  20. quit
  21. reconfig [-s][-v version][[-file path]|[-members serverID=host:port1:port2;port3[,...]*]]|[-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
  22. redo cmdno
  23. removewatches path [-c|-d|-a][-l]set[-s][-v version] path data
  24. setAcl [-s][-v version][-R] path acl
  25. setquota -n|-b|-N|-B val path
  26. stat[-w] path
  27. sync path
  28. version
  29. whoami
  30. Command not found: Command not found help

在这里插入图片描述

3、create

create命令:创建节点,默认持久节点

  1. create [-s][-e][-c][-t ttl] path [data][acl]
  • -s:有序节点
  • -e:临时节点,不加默认是持久节点
  • -t ttl:带过期时间节点,单位:秒,比如:create ‐t 10 /node_ttl,/node_ttl节点在10s后将过期被删除。
  • -c:容器节点,当容器中的最后一个子级被删除时,容器将被删除;

Zookeeper原生命令不支持级联创建节点树目录,需要一级一级的创建;curator客户端封装了级联创建的API。

Znode节点类型有四种:

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

1> 创建持久节点

  1. [zk: 127.0.0.1:2181(CONNECTED)0] create /node_p1
  2. Created /node_p1

2> 创建临时节点

  1. [zk: 127.0.0.1:2181(CONNECTED)1] create -e /node_e1 "node value"
  2. Created /node_e1

3> 创建持久有序节点

持久有序节点:设置的节点路径会被重命名为序列数,不设置节点前缀时,序列数从

  1. 0000000000

开始递增;

  • 某一个节点路径下的序列数一直递增,无论一直带前缀、偶尔带前缀、或一直不带前缀;

不设置节点前缀时:

  1. [zk: 127.0.0.1:2181(CONNECTED)5] create /node_p2
  2. Created /node_p2
  3. [zk: 127.0.0.1:2181(CONNECTED)6] create -s /node_p2/
  4. Created /node_p2/0000000000
  5. [zk: 127.0.0.1:2181(CONNECTED)7] create -s /node_p2/
  6. Created /node_p2/0000000001

设置节点前缀时:

  1. [zk: 127.0.0.1:2181(CONNECTED)12] create -s /node_p2/seq_
  2. Created /node_p2/seq_0000000002
  3. [zk: 127.0.0.1:2181(CONNECTED)13] create -s /node_p2/seq_
  4. Created /node_p2/seq_0000000003

4> 创建临时有序节点

设置节点前缀时:

  1. [zk: 127.0.0.1:2181(CONNECTED)14] create -s-e /node_p2/e_
  2. Created /node_p2/e_0000000004
  3. [zk: 127.0.0.1:2181(CONNECTED)15] create -s-e /node_p2/e_
  4. Created /node_p2/e_0000000005

不设置节点前缀时:

  1. [zk: 127.0.0.1:2181(CONNECTED)16] create -s-e /node_p2/
  2. Created /node_p2/0000000006
  3. [zk: 127.0.0.1:2181(CONNECTED)17] create -s-e /node_p2/
  4. Created /node_p2/0000000007

5> 创建ttl节点

默认禁用,需要在 zoo.cfg中添加 extendedTypesEnabled=true 开启。 否者报如下错:

  1. [zk: 127.0.0.1:2181(CONNECTED)18] create -t10 /node_ttl "ttl node value"
  2. KeeperErrorCode = Unimplemented for /node_ttl

开启ttl之后:

  1. [zk: 127.0.0.1:2181(CONNECTED)8] create -t10 /node_ttl "ttl node value"
  2. Created /node_ttl
  3. [zk: 127.0.0.1:2181(CONNECTED)9] get /node_ttl
  4. ttl node value
  5. [zk: 127.0.0.1:2181(CONNECTED)10] get /node_ttl
  6. Node does not exist: /node_ttl
  • /node_ttl,10s之后过期

注意:ttl不能用于临时节点 。

6> 创建容器节点

  1. [zk: 127.0.0.1:2181(CONNECTED)0] create -c /container_node mydata
  2. Created /container_node
  3. [zk: 127.0.0.1:2181(CONNECTED)1] create -c /container_node/child_1 mydata
  4. Created /container_node/child_1
  5. [zk: 127.0.0.1:2181(CONNECTED)2] create -c /container_node/child_2 mydata
  6. Created /container_node/child_2
  7. [zk: 127.0.0.1:2181(CONNECTED)3] delete /container_node/child_1
  8. [zk: 127.0.0.1:2181(CONNECTED)4] delete /container_node/child_2
  9. [zk: 127.0.0.1:2181(CONNECTED)5] get /container_node
  10. mydata
  11. [zk: 127.0.0.1:2181(CONNECTED)6] get /container_node
  12. mydata
  13. [zk: 127.0.0.1:2181(CONNECTED)7] get /container_node
  14. mydata
  15. [zk: 127.0.0.1:2181(CONNECTED)8] get /container_node
  16. Node does not exist: /container_node

从测试结果来看,容器节点的最后一个子级被删除之后,过了几秒,容器节点才被删除。

4、get

get命令:获取节点/文件内容

  1. get [-s][-w] path
  • -s:查看节点数据以及节点状态信息
  • -w:添加一个watch,节点数据变更时,会通知客户端(通知是一次性的)。
  1. [zk: 127.0.0.1:2181(CONNECTED)12] create /node_test "testNode value"
  2. Created /node_test
  3. [zk: 127.0.0.1:2181(CONNECTED)13] get /node_test
  4. testNode value

-s 选项在获取到节点值的同时,会带出节点的状态stat:

  1. [zk: 127.0.0.1:2181(CONNECTED)14] get -s /node_test
  2. testNode value
  3. cZxid = 0x14 # 数据节点创建时的事务ID
  4. ctime = Wed Nov 3015:09:39 CST 2022# 数据节点创建时的时间
  5. mZxid = 0x18 # 数据节点最后一次更新时的事务ID
  6. mtime = Wed Nov 3015:14:25 CST 2022# 数据节点最后一次更新时的时间
  7. pZxid = 0x14 # 数据节点的子节点最后一次被修改时的事务ID
  8. cversion =0# 子节点的更改次数
  9. dataVersion =3# 节点数据的更改次数
  10. aclVersion =0# 节点的ACL的更改次数
  11. ephemeralOwner = 0x0 # 如果节点是临时节点,则表示创建该节点的会话的SessionID,如果节点是持久节点,则该属性值为0.
  12. dataLength =24# 数据内容的长度
  13. numChildren =0# 数据节点当前的子节点个数

5、set

set命令:修改节点内容;每次修改成功后,版本号会自动+1,初始为0

  1. set[-s][-v version] path data
  • -s:更新节点数据并显示节点状态信息
  • -v:指定数据版本号,如果指定的数据版本号和数据当前版本号不一致,则更新失败(可以理解为乐观锁的概念)。
  1. [zk: 127.0.0.1:2181(CONNECTED)15]set /node_test "updated tesetNode value"

-s选项,更新节点数据并显示节点状态信息

  1. [zk: 127.0.0.1:2181(CONNECTED)16]set-s /node_test "updated tesetNode value2"
  2. cZxid = 0x14
  3. ctime = Wed Nov 3015:09:39 CST 2022
  4. mZxid = 0x16
  5. mtime = Wed Nov 3015:13:40 CST 2022
  6. pZxid = 0x14
  7. cversion =0
  8. dataVersion =2
  9. aclVersion =0
  10. ephemeralOwner = 0x0
  11. dataLength =24
  12. numChildren =0

-v选项,指定数据版本号,如果指定的数据版本号和数据当前版本号不一致,则更新失败(可以理解为乐观锁方式更新);

  1. [zk: 127.0.0.1:2181(CONNECTED)17]set-v3 /node_test "updated tesetNode value3"
  2. version No is not valid : /node_test
  3. [zk: 127.0.0.1:2181(CONNECTED)18]set-s-v2 /node_test "updated tesetNode value3"
  4. cZxid = 0x14
  5. ctime = Wed Nov 3015:09:39 CST 2022
  6. mZxid = 0x18
  7. mtime = Wed Nov 3015:14:25 CST 2022
  8. pZxid = 0x14
  9. cversion =0
  10. dataVersion =3
  11. aclVersion =0
  12. ephemeralOwner = 0x0
  13. dataLength =24
  14. numChildren =0
  • 在 -s选项操作后,/node_test的version为2,在-v选项更新时,必须执行version为2才能完成更新操作。

6、ls

ls命令:查看目录下的节点信息

  1. ls[-s][-w][-R] path
  • -s:显示节点详情,包括状态信息
  • -w:添加一个watch监视器
  • -R:列举出节点的级联节点
  • path:显示某目录下节点/文件
  1. [zk: 127.0.0.1:2181(CONNECTED)19] create /node_test/sub_node1 "1"
  2. Created /node_test/sub_node1
  3. [zk: 127.0.0.1:2181(CONNECTED)20] create /node_test/sub_node2 "2"
  4. Created /node_test/sub_node2
  5. [zk: 127.0.0.1:2181(CONNECTED)21]ls /node_test
  6. [sub_node1, sub_node2][zk: 127.0.0.1:2181(CONNECTED)22]ls-s /node_test
  7. [sub_node1, sub_node2]
  8. cZxid = 0x14
  9. ctime = Wed Nov 3015:09:39 CST 2022
  10. mZxid = 0x18
  11. mtime = Wed Nov 3015:14:25 CST 2022
  12. pZxid = 0x1a
  13. cversion =2
  14. dataVersion =3
  15. aclVersion =0
  16. ephemeralOwner = 0x0
  17. dataLength =24
  18. numChildren =2[zk: 127.0.0.1:2181(CONNECTED)23]ls-R /node_test
  19. /node_test
  20. /node_test/sub_node1
  21. /node_test/sub_node2
  22. [zk: 127.0.0.1:2181(CONNECTED)24]

7、stat

stat命令:查看节点状态。

  1. stat[-w] path
  • -w:添加watch
  • path:查看某目录下节点的状态
  1. [zk: 127.0.0.1:2181(CONNECTED)24]stat /node_test
  2. cZxid = 0x14
  3. ctime = Wed Nov 3015:09:39 CST 2022
  4. mZxid = 0x18
  5. mtime = Wed Nov 3015:14:25 CST 2022
  6. pZxid = 0x1a
  7. cversion =2
  8. dataVersion =3
  9. aclVersion =0
  10. ephemeralOwner = 0x0
  11. dataLength =24
  12. numChildren =2

8、删除节点

delete命令只能删除没有子节点的节点;deleteall命令可以级联删除当前节点和子节点;

1> delete

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

  1. delete [-v version] path
  • -v:指定数据版本号,如果指定的数据版本号和数据当前版本号不一致,则删除失败;
  1. [zk: 127.0.0.1:2181(CONNECTED)25] delete /node_test/sub_node1
  2. [zk: 127.0.0.1:2181(CONNECTED)26]ls-R /node_test
  3. /node_test
  4. /node_test/sub_node2

2> deleteall

deleteall命令:级联删除该节点和子节点。

  1. deleteall path
  1. [zk: 127.0.0.1:2181(CONNECTED)27] deleteall /node_test
  2. [zk: 127.0.0.1:2181(CONNECTED)28]ls-R /node_test
  3. Node does not exist: /node_test
  4. [zk: 127.0.0.1:2181(CONNECTED)29]ls /node_test/sub_node2
  5. Node does not exist: /node_test/sub_node2

8、其他命令

  • getAllChildrenNumber:获取节点下的所有子孙节点数量
  • getEphemerals:获取当前客户端创建的所有临时节点
  • history:显示最近执行的11条命令的历史记录

二、监听器Watcher

Watcher(事件监听器)允许用户在指定节点上注册 Watcher,在特定事件发生时,Watcher会被触发;Zookeeper服务端将事件通知到响应的客户端上去;

该机制是Zookeeper实现分布式协调服务的重要特性。

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

1、一次性监听器

1> 监听节点目录变化

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

  1. ls-w path

Session1:

  1. # 创建节点[zk: 127.0.0.1:2181(CONNECTED)31] create /watch_node
  2. Created /watch_node
  3. # 监听节点目录变化[zk: 127.0.0.1:2181(CONNECTED)32]ls-w /watch_node
  4. []

Session2:

  1. # 创建/watch_node节点的子节点[zk: 127.0.0.1:2181(CONNECTED)0] create /watch_node/node1 "node1 value"
  2. Created /watch_node/node1
  3. [zk: 127.0.0.1:2181(CONNECTED)1] create /watch_node/node2 "node2 value"
  4. Created /watch_node/node2

当/watch_node节点的子节点第一次发生变化时,会触发session1的Watcher,触发后会被删除,无法再次触发。

  1. [zk: 127.0.0.1:2181(CONNECTED)33]
  2. WATCHER::
  3. WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watch_node

图示:

在这里插入图片描述

2> 监听节点数据变化

当该节点数据发生改变时触发,但子节点的数据变化不会触发。一次性监听,触发后会被删除,无法再次触发。

  1. get -w path

Session1:

  1. [zk: 127.0.0.1:2181(CONNECTED)33] get -w /watch_node
  2. null

Session2:

  1. [zk: 127.0.0.1:2181(CONNECTED)3]set /watch_node "hahaha"

当/watch_node节点的数据第一次发生变化时,会触发session1的Watcher,触发后会被删除,无法再次触发。

  1. [zk: 127.0.0.1:2181(CONNECTED)34]
  2. WATCHER::
  3. WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node

图示:

在这里插入图片描述

2、永久的监听器

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

  1. addWatch [-m mode] path

永久监听器在创建时可以通过 -m 选项指定模式,有两种模式:

  • PERSISTENT:节点的数据变化以及子节点的变化会触发相应事件,子节点的数据变化不会触发。
  • PERSISTENT_RECURSIVE(默认模式,不指定时使用):节点的数据变化以及所有子孙节点的目录或者数据变化都会触发相应事件。

1> PERSISTENT

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

  1. # 1、增加PERSISTENT模式的监听器[zk: 127.0.0.1:2181(CONNECTED)34] addWatch -m PERSISTENT /watch_node
  2. # 2、节点数据发生变更时,触发监听器[zk: 127.0.0.1:2181(CONNECTED)35]set /watch_node "node12321"
  3. WATCHER::
  4. WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node
  5. # 3、节点的子节点新增时,触发监听器[zk: 127.0.0.1:2181(CONNECTED)36] create /watch_node/node4 "node4"
  6. WATCHER::Created /watch_node/node4
  7. WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watch_node
  8. # 4、节点的子节点数据发生变化时,不会触发监听器[zk: 127.0.0.1:2181(CONNECTED)37]set /watch_node/node4 "node4-2"# 5、节点的子节点删除时,触发监听器[zk: 127.0.0.1:2181(CONNECTED)38] delete /watch_node/node4
  9. WATCHER::
  10. WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watch_node

2> PERSISTENT_RECURSIVE

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

  1. # 创建一个节点[zk: 127.0.0.1:2181(CONNECTED)40] create /watch_node2
  2. Created /watch_node2
  3. # 1、针对节点增加PERSISTENT_RECURSIVE模式的监听器[zk: 127.0.0.1:2181(CONNECTED)41] addWatch -m PERSISTENT_RECURSIVE /watch_node2
  4. # 2、节点数据发生变更时,触发监听器[zk: 127.0.0.1:2181(CONNECTED)42]set /watch_node2 "hahahah"
  5. WATCHER::
  6. WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node2
  7. # 3、节点的子节点新增时,触发监听器[zk: 127.0.0.1:2181(CONNECTED)43] create /watch_node2/node1
  8. WATCHER::Created /watch_node2/node1
  9. WatchedEvent state:SyncConnected type:NodeCreated path:/watch_node2/node1
  10. # 4、节点的子节点数据发生变化时,触发监听器[zk: 127.0.0.1:2181(CONNECTED)44]set /watch_node2/node1 "node1"
  11. WATCHER::
  12. WatchedEvent state:SyncConnected type:NodeDataChanged path:/watch_node2/node1
  13. # 5、节点的子节点删除时,触发监听器[zk: 127.0.0.1:2181(CONNECTED)45] delete /watch_node2/node1
  14. WATCHER::
  15. WatchedEvent state:SyncConnected type:NodeDeleted path:/watch_node2/node1

3、删除监听器

删除某个节点的监听器,删除后节点相应的变更事件不会再触发监听器

  1. removewatches path
  1. [zk: 127.0.0.1:2181(CONNECTED)48] removewatches /watch_node2
  2. WATCHER::
  3. WatchedEvent state:SyncConnected type:PersistentWatchRemoved path:/watch_node2

三、四字监控命令

见博文:https://saint.blog.csdn.net/article/details/128115252

标签: zookeeper 云原生

本文转载自: https://blog.csdn.net/Saintmm/article/details/128104317
版权归原作者 秃秃爱健身 所有, 如有侵权,请联系我们删除。

“Zookeeper生产常用命令大全(最新3.8.0版本)”的评论:

还没有评论