2019独角兽企业重金招聘Python工程师标准>>>
ZooKeeper命令行脚本
ZooKeeper安装目录下的 bin 目录下提供了一些命令行工具。
脚本 | 说明 |
---|---|
zkCleanup.sh | 用于清理 ZooKeeper 事务日志文件和对应的数据快照文件 |
zkCli.sh | ZooKeeper 客户端 |
zkEnv.sh | 设置 ZooKeeper 环境变量 |
zkServer.sh | 启动、停止和重启 ZooKeeper 服务 |
本文主要演示如何使用 ZooKeeper 的客户端与 ZooKeeper 服务器进行交互。
##连接ZooKeeper服务器
输入以下命令可以连接到 ZooKeeper 服务器:
zkCli.sh
如果连接成功, 会输出以下信息, 限于篇幅, 中间会省略一些信息:
Connecting to localhost:2181
2016-07-10 23:22:18,200 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.8--1, built on 02/06/2016 03:18 GMT
2016-07-10 23:22:18,202 [myid:] - INFO [main:Environment@100] - Client environment:host.name=master
2016-07-10 23:22:18,203 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.7.0_80
........................
2016-07-10 23:22:18,207 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@39165e21
Welcome to ZooKeeper!
........................
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
因为没有显示地指定 ZooKeeper 服务器的地址, 默认将会连接到本机的 ZooKeeper 服务器。可以使用下面的方式指定连接的 ZooKeeper 服务器:
zkCli.sh -server slave01:2181
连接信息如下:
Connecting to slave01:2181
..................................
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: slave01:2181(CONNECTED) 0]
可以看到已经成功连接到 slave01 上的 ZooKeeper 服务器。
在 shell 中, 输入 "help" 可以得到客户端可以执行的命令列表:
##常用命令行操作 ###查看(ls) ####用法 使用 ls 命令可以列出 ZooKeeper 指定节点下的所有子节点。需要注意的是只能查看指定节点下的第一级子节点。具体用法如下:
ls path [watch]
在根节点 "/" 下面默认有一个 "/zookeeper" 的保留节点。 ###创建(create) ####用法 使用 create 命令可以创建一个 znode, 具体用法如下:
create [-s] [-e] path data acl
其中, -s 用于指定节点是否是顺序的, -e 用于指定节点是否是临时的, -s 和 -e 是可选的, 默认创建持久节点。path 用于指定节点路径, data 表示节点数据, acl 用于权限控制, 默认情况下不做权限控制。 ####示例
可以看到 "/zk_test" 节点已经成功创建。
###读取(get) ####用法 使用 get 命令可以获取 ZooKeeper 指定节点的数据内容和相关信息, 具体用法如下:
get path [watch]
输出的第一行是节点 "/zk_test" 的数据内容, cZxid 是创建 "/zk_test" 节点的事务ID, ctime 表示节点创建的时间, mZxid 是最后更新 "/zk_test" 节点的事务ID, mtime 是最后更新 "/zk_test" 节点的时间, cversion 表示子节点更新的次数, dataVersion 表示数据版本, aclVersion 表示 ACL 更新的次数, 如果节点是一个临时节点的话 ephemeralOwner 表示节点拥有者的会话ID, 如果不是临时节点, ephemeralOwner 的值将会是 0, dataLength 表示数据长度, numChildren 表示子节点数量, 等等。 ###更新(set) ####用法 使用 set 命令可以更新节点的数据, 具体用法如下:
set path data [version]
其中 path 指定节点路径, data 是更新后的数据,在 ZooKeeper 中, znode 中的数据是有版本概念的, version 就是用来指定更新操作是基于 znode 的哪一个数据版本。 ####示例
执行完 set 命令后, "/zk_test" 节点数据已经被更新成 test_data_updated。从上图可以看到, dataVersion 的值由 0 变成了 1。
###删除(delete) ####用法 使用 delete 命令可以删除指定的节点, 具体用法如下:
delete path [version]
其中 path 指定节点路径, version 参数和 set 命令中的 version 参数一样。
从上图可以看到, "/zk_test" 节点成功被删除。需要注意的是, 如果要删除的节点有子节点, 则删除会失败。如下:
从上图可以看到, "/zk_test" 节点删除失败, 提示 "Node not empty: /zk_test", 因为 "/zk_test" 节点包含一个子节点 "/test_child"。 ###统计(stat) 使用 stat 命令可以输出节点的统计信息, 具体用法如下:
stat path [watch]
其中 path 指定节点路径。 ####用法 ###历史(history) 使用 history 命令可以查看客户端中执行的历史命令。 ###退出(quit)和关闭(close) 使用 quit 和 close 命令均可以关闭会话。
##参考资料 http://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_ConnectingToZooKeeper