Zookeeper 命令介绍


1. 创建节点 create

  • 功能:创建普通节点,如果创建节点中的内容中有空格需要用双引号包起来。

  • 命令格式:create [-s] [-e] [-c] [-t ttl] path [data] [acl]

    • -s:创建带编号的节点
    • -e:创建临时节点
    • t ttl:生存时间
    • data:节点的值
    • acl:权限控制
 [zk: localhost:2181(CONNECTED) 0] create /app1 app1
 Created /app1
 [zk: localhost:2181(CONNECTED) 1] ls -s /
 [app1, zookeeper]cZxid = 0x0
 ctime = Thu Jan 01 08:00:00 GMT+08:00 1970
 mZxid = 0x0
 mtime = Thu Jan 01 08:00:00 GMT+08:00 1970
 pZxid = 0x7 # 更新子节点zxid
 cversion = 0
 dataVersion = 0
 aclVersion = 0
 ephemeralOwner = 0x0
 dataLength = 0
 numChildren = 2 #子节点数量更新为2
 #创建带编号的节点
 [zk: localhost:2181(CONNECTED) 1] create -s /app2 app2
 Created /app20000000001
 [zk: localhost:2181(CONNECTED) 2] ls /
 [app1, app20000000001, zookeeper]

 #创建临时节点
 [zk: localhost:2181(CONNECTED) 4] create -e /app3 app3
 Created /app3
 [zk: localhost:2181(CONNECTED) 5]
 [zk: localhost:2181(CONNECTED) 5]
 [zk: localhost:2181(CONNECTED) 5] ls /
 [app1, app20000000001, app3, zookeeper]
 #退出后重新查看
 [zk: localhost:2181(CONNECTED) 0] ls /
 [app1, app20000000001, zookeeper]
 #创建临时带编码节点
 [zk: localhost:2181(CONNECTED) 1] create -e -s /app4 app4
 Created /app40000000004
 [zk: localhost:2181(CONNECTED) 2] ls /
 [app1, app20000000001, app40000000004, zookeeper]
 #退出后重新查看
 [zk: localhost:2181(CONNECTED) 0] ls /
 [app1, app20000000001, zookeeper]
  • 编号节点创建说明:
  1. 顺序编号会紧跟在节点后面,节点最终名称为:节点名+序号,如app20000000001
  2. 顺序编号是一个递增的计数器
  3. 顺序编号是由父节点维护,从已有子节点个数开始的,被删除的节点依然算在内
  4. 如果子节点为空,则从0000000000开始,一次递增1
  5. 在分布式系统中,顺序编号可以被用于为所有的时间进行全局排序,这样客户端就可以根据序号推断事件的顺序。

2. 查看节点及相关信息

2.1 ls

  • 功能:查看指定路径下的内容
  • 命令格式: ls [-s] [-w] [-R] path
    • -s:查看节点详细信息
    • -w :监视该节点
    • -R:递归查看
# 查看根节点下的文件
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]

[zk: localhost:2181(CONNECTED) 3] ls -w /
[zookeeper]
#递归查看根节点下面的目录与文件
[zk: localhost:2181(CONNECTED) 4] ls -R /
/
/zookeeper
/zookeeper/config
/zookeeper/quota
[zk: localhost:2181(CONNECTED) 5]

#查看根节点的详细信息
[zk: localhost:2181(CONNECTED) 2] ls -s /
# 节点的状态信息,也称为stat结构体
[zookeeper]
cZxid          = 0x0 # 表示创建该节点(ZNode)的事务的zxid,c=create
ctime          = Thu Jan 01 08:00:00 GMT+08:00 1970 #
mZxid          = 0x0
mtime          = Thu Jan 01 08:00:00 GMT+08:00 1970
pZxid          = 0x0
cversion       = -1
dataVersion    = 0
aclVersion     = 0
ephemeralOwner = 0x0
dataLength     = 0
numChildren    = 1
名称 说明 value示例
cZxid 表示创建该节点(ZNode)的事务的zxid,值越小,越先执行,c=create0x0十六进制的数字0 0x0
ctime 创建该节点的时间 Thu Jan 01 08:00:00 GMT+08:00 1970
mZxid 最后一次更新事务的zxid,m=modify 0x0
mtime 最后一次更新的时间 Thu Jan 01 08:00:00 GMT+08:00 1970
pZxid 最后更新的子节点的zxid 0x0
cversion 子节点的变化号,表示子节点被修改的次数,-1表示从未被修改过 -1
dataVersion 当前节点的变化号,0表示当前节点从未被修改过 0
aclVersion 访问控制列表,access control list 0
ephemeralOwner 如果是临时节点,表示当前节点的拥有者的sessionid,
如果不是临时节点则值为0
0x0
dataLength 当前节点中所存储的数据长度 0
numChildren 子节点数量 1
  • 为了保证事务的顺序一致性,Zookeeper才用了递增的事务ID(zxid)来标识事务。所有提议(proposal)都在提出时候加上了zxid。zxid是一个64位的数字,它的高32位是epoch用来标识leader关系是否改变,每次leader被选出来,它都会有一个新的epoch,标识当前属于哪个leader的管理时期,低32位用于递增计数。

2.2 ls2

  • 功能:查看节点详细信息,推荐使用 ls -s 替换
  • 命令格式:ls2 path [watch]
    • watch:对节点中的内容进行监视
[zk: localhost:2181(CONNECTED) 6] ls2 /zookeeper
'ls2' has been deprecated. Please use 'ls [-s] path' instead.
[config, quota]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 GMT+08:00 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 GMT+08:00 1970
pZxid = 0x0
cversion = -2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2

2.3 stat

  • 功能:查看节点状态
  • 命令格式:stat [-w] path
    • -w :监视该节点
[zk: localhost:2181(CONNECTED) 7] stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 GMT+08:00 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 GMT+08:00 1970
pZxid = 0x24
cversion = 11
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 3

2.4 get

  • 功能:查看节点值
  • 命令格式:get [-s] [-w] path
    • -s :查看详细状态
    • -w :监视该节点
[zk: localhost:2181(CONNECTED) 71] get /zookeeper
zookeeper
[zk: localhost:2181(CONNECTED) 72] get -s /zookeeper
zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x40000005f
mtime = Thu Feb 06 01:08:31 CST 2020
pZxid = 0x0
cversion = -2
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 2
[zk: localhost:2181(CONNECTED) 73]
[zk: localhost:2181(CONNECTED) 73] get -w /zookeeper
zookeeper
[zk: localhost:2181(CONNECTED) 74] set /zookeeper zookeeper2

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/zookeeper

3. 修改节点信息 set

  • 命令格式:set [-s] [-v version] path data
[zk: localhost:2181(CONNECTED) 7] get /zookeeper
zookeeper3
#修改节点值
[zk: localhost:2181(CONNECTED) 8] set /zookeeper 111
[zk: localhost:2181(CONNECTED) 9] get /zookeeper
111
[zk: localhost:2181(CONNECTED) 10]

4. 删除节点相关命令

4.1 delete

  • 功能:删除节点,注意要删除的节点必须为空节点,即不能有子节点
  • 命令格式:delete [-v version] path
    • -v:删除的版本
[zk: localhost:2181(CONNECTED) 5] ls /
[app1, app20000000001, app5, app6, zookeeper]
[zk: localhost:2181(CONNECTED) 6] delete /app20000000001
[zk: localhost:2181(CONNECTED) 7]
[zk: localhost:2181(CONNECTED) 7] ls /
[app1, app5, app6, zookeeper]

4.2 deleteall

  • 功能:删除节点,会递归删除节点及其子节点
  • 命令格式:deleteall path
[zk: localhost:2181(CONNECTED) 1] ls /
[app1, app5, app6, zookeeper]
[zk: localhost:2181(CONNECTED) 2] create /app6/6-1
Created /app6/6-1
[zk: localhost:2181(CONNECTED) 3] create /app6/6-2
Created /app6/6-2
[zk: localhost:2181(CONNECTED) 4] delete /app6
Node not empty: /app6
[zk: localhost:2181(CONNECTED) 5] deleteall /app6
[zk: localhost:2181(CONNECTED) 6] ls /
[app1, app5, zookeeper]

4.3 rmr

  • 功能:递归删除节点,zookeeper 3.5.6版本中 已经使用 deleteall 替换掉 rmr 命令
  • 命令格式:rmr path
  • 废除:zookeeper 3.5.6版本中 已经使用 deleteall 替换掉 rmr 命令
[zk: localhost:2181(CONNECTED) 13] rmr /app5
The command 'rmr' has been deprecated. Please use 'deleteall' instead.

5. 权限相关的

5.1 getAcl

  • 功能:读取 ACL 权限
  • 命令格式:getAcl [-s] path
# 查看权限
[zk: localhost:2181(CONNECTED) 3] getAcl /app1
'world,'anyone #默认为world方案
: cdrwa #任何人都拥有所有权限
[zk: localhost:2181(CONNECTED) 4]

5.2 setAcl

  • 功能:设置 ACL 权限
  • 命令格式:setAcl [-s] [-v version] [-R] path acl
#设置权限
[zk: localhost:2181(CONNECTED) 4] setAcl /app1 world:anyone:cdrwa

5.3 addauth

  • 功能:添加认证用户
  • 命令格式: addauth scheme auth
[zk: localhost:2181(CONNECTED) 0] addauth digest hn:123

5.4 setquota

  • 功能:设置子节点个数和数据长度配额
  • 命令格式:setquota -n|-b val path
    • -n:子节点个数
    • -b:节点数据长度

ZooKeeper具有与其数据模型相关的可配置配额(quota)。 可以设置znode上的配额限制和存储的数据量。如果ZooKeeper命名空间中的一个子树超出与其关联的配额,ZooKeeper会在日志中打印警告消息。但是,如果超出指定的配额,操作并不会取消。

# 设置配额
[zk: localhost:2181(CONNECTED) 10] setquota -n 2 /app1
[zk: localhost:2181(CONNECTED) 11]
[zk: localhost:2181(CONNECTED) 11] create /app1/a
Created /app1/a
[zk: localhost:2181(CONNECTED) 12] create /app1/b
Created /app1/b
[zk: localhost:2181(CONNECTED) 13] create /app1/c
Created /app1/c
[zk: localhost:2181(CONNECTED) 14] ls /app1
[a, b, c]

# 日志中打印的警告信息

2020-02-06 20:47:18,273 [myid:150] - WARN  [CommitProcWorkThread-1:DataTree@340] - Quota exceeded: /app1 count=3 limit=2
2020-02-06 20:47:20,242 [myid:150] - WARN  [CommitProcWorkThread-1:DataTree@340] - Quota exceeded: /app1 count=4 limit=2
2020-02-06 20:47:57,606 [myid:150] - WARN  [CommitProcWorkThread-1:DataTree@340] - Quota exceeded: /app1 count=5 limit=2
2020-02-06 20:47:59,720 [myid:150] - WARN  [CommitProcWorkThread-1:DataTree@340] - Quota exceeded: /app1 count=6 limit=2

5.5 listquota

  • 功能:显示配额。
  • 命令格式:listquota path
[zk: localhost:2181(CONNECTED) 15] listquota /app1
absolute path is /zookeeper/quota/app1/zookeeper_limits
Output quota for /app1 count=2,bytes=-1 #节点个数限额为2,长度无限额
Output stat for /app1 count=4,bytes=4

5.6 delquota

  • 功能:删除配额
  • 命令格式:delquota [-n|-b] path
    • -n:子节点个数
    • -b:节点数据长度
# 删除配额
[zk: localhost:2181(CONNECTED) 20] delquota /app1 -n 1
[zk: localhost:2181(CONNECTED) 21]
[zk: localhost:2181(CONNECTED) 21] listquota /app1
absolute path is /zookeeper/quota/app1/zookeeper_limits
Output quota for /app1 count=-1,bytes=-1
Output stat for /app1 count=6,bytes=4

6. 其他命令

6.1 close

  • 功能:断开客户端与服务端的连接。
# 创建临时节点
[zk: localhost:2181(CONNECTED) 19] create -e /app1 ap1
Created /app1
[zk: localhost:2181(CONNECTED) 20]
#查看根节点下面的节点信息
[zk: localhost:2181(CONNECTED) 20] ls /
[app1, rmiservers, zookeeper]
[zk: localhost:2181(CONNECTED) 21]
[zk: localhost:2181(CONNECTED) 21]
#关闭连接
[zk: localhost:2181(CONNECTED) 21] close

WATCHER::

WatchedEvent state:Closed type:None path:null
2020-02-06 01:34:12,279 [myid:] - INFO  [main:ZooKeeper@1422] - Session: 0x9600014571250011 closed
[zk: localhost:2181(CLOSED) 22] 2020-02-06 01:34:12,279 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@524] - EventThread shut down for session: 0x9600014571250011

#在另一个客户端查看根节点下的子节点,刚刚创建的app1已经删除

[zk: localhost:2181(CONNECTED) 23] ls /
[rmiservers, zookeeper]

6.2 connect

  • 功能:连接zk服务端,与close命令配合使用可以连接或者断开zk服务端。
  • 命令格式:connect host:port
#关闭连接
[zk: localhost:2181(CONNECTED) 25] close

WATCHER::

WatchedEvent state:Closed type:None path:null
2020-02-06 01:37:27,112 [myid:] - INFO  [main:ZooKeeper@1422] - Session: 0x9600014571250013 closed
[zk: localhost:2181(CLOSED) 26] 2020-02-06 01:37:27,112 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@524] - EventThread shut down for session: 0x9600014571250013
#查看根节点信息
[zk: localhost:2181(CLOSED) 26] ls /
Not connected #未连接
# 使用connect命令进行连接
[zk: localhost:2181(CLOSED) 27] connect
2020-02-06 01:37:32,472 [myid:] - INFO  [main:ZooKeeper@868] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@4c203ea1
2020-02-06 01:37:32,473 [myid:] - INFO  [main:ClientCnxnSocket@237] - jute.maxbuffer value is 4194304 Bytes
2020-02-06 01:37:32,473 [myid:] - INFO  [main:ClientCnxn@1653] - zookeeper.request.timeout value is 0. feature enabled=
[zk: localhost:2181(CONNECTING) 28] 2020-02-06 01:37:32,475 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1112] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
2020-02-06 01:37:32,477 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@959] - Socket connection established, initiating session, client: /0:0:0:0:0:0:0:1:50345, server: localhost/0:0:0:0:0:0:0:1:2181
2020-02-06 01:37:32,481 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1394] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x9600014571250014, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
#查看根节点信息,已经连接上了
[zk: localhost:2181(CONNECTED) 28] ls /
[rmiservers, zookeeper]
[zk: localhost:2181(CONNECTED) 29]

6.3 printwatches

  • 功能:设置和显示监视状态,on或者off。
  • 命令格式:printwatches on|off
[zk: localhost:2181(CONNECTED) 64] get -w /rmiservers
111
[zk: localhost:2181(CONNECTED) 65] set  /rmiservers 222

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/rmiservers
[zk: localhost:2181(CONNECTED) 66]
[zk: localhost:2181(CONNECTED) 66]
[zk: localhost:2181(CONNECTED) 66] printwatches off
[zk: localhost:2181(CONNECTED) 67]
[zk: localhost:2181(CONNECTED) 67] get -w /rmiservers
222
[zk: localhost:2181(CONNECTED) 68]
[zk: localhost:2181(CONNECTED) 68] set  /rmiservers 333

6.4 sync

  • 功能:强制同步,由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作。
  • 命令格式:sync path
[zk: localhost:2181(CONNECTED) 3] sync /zookeeper
Sync is OK
[zk: localhost:2181(CONNECTED) 4]

6.5 history

  • 功能:查看执行命令的历史记录
  • 命令格式:history
[zk: localhost:2181(CONNECTED) 14] history
4 - delete /app6
5 - deleteall /app6
6 - ls /
7 - stat /
8 - stat -w /
9 - ls /
10 - create /app5/5-1
11 - create /app5/5-2
12 - ls /app5
13 - rmr /app5
14 - history

6.6 redo

  • 功能:再次执行某命令,需与history配合使用
  • 命令格式:redo cmdno
[zk: localhost:2181(CONNECTED) 4] history
0 - ls /
1 - listquota /rmiservers
2 - sync /zookeeper
3 - history
[zk: localhost:2181(CONNECTED) 5] redo 0
[rmiservers, zookeeper]
[zk: localhost:2181(CONNECTED) 6]

6.7 help

  • 功能:查看帮助,查看所有操作命令
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
    addauth scheme auth
    close
    config [-c] [-w] [-s]
    connect host:port
    create [-s] [-e] [-c] [-t ttl] path [data] [acl]
    delete [-v version] path
    deleteall path
    delquota [-n|-b] path
    get [-s] [-w] path
    getAcl [-s] path
    history
    listquota path
    ls [-s] [-w] [-R] path
    ls2 path [watch]
    printwatches on|off
    quit
    reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
    redo cmdno
    removewatches path [-c|-d|-a] [-l]
    rmr path
    set [-s] [-v version] path data
    setAcl [-s] [-v version] [-R] path acl
    setquota -n|-b val path
    stat [-w] path
    sync path
Command not found: Command not found help

6.8 quit

  • 功能:退出
  • 命令格式:quit
[zk: localhost:2181(CONNECTED) 78] quit

WATCHER::

WatchedEvent state:Closed type:None path:null
2020-02-06 01:13:03,959 [myid:] - INFO  [main:ZooKeeper@1422] - Session: 0x9600014571250002 closed
2020-02-06 01:13:03,961 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@524] - EventThread shut down for session: 0x9600014571250002
[root@node1 ~]#

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
Kafka总结(一)kafka部署与架构介绍 Kafka总结(一)kafka部署与架构介绍
1. Apache Kafka介绍Kafka 是最初由Linkedin公司开发,是一个分布式、支持分区(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统。它的最大特性就是可以实时的处理大量数据,以
2020-02-07
下一篇 
Zookeeper 全景介绍 Zookeeper 全景介绍
1. Zookeeper 简介1.1 什么是zookeeper zookeeper 直译 动物园管理员 Apache Zookeeper 是Google的Chubby的一个开源对的实现,为分布式应用提供协调服务,用来解决分布式应用中的数据管
2020-02-01
  目录