1. 创建节点 create
功能:创建普通节点,如果创建节点中的内容中有空格需要用双引号包起来。
命令格式:create [-s] [-e] [-c] [-t ttl] path [data] [acl]
- -s:创建带编号的节点
- -e:创建临时节点
- t ttl:生存时间
- data:节点的值
- acl:权限控制
bash
[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]
- 编号节点创建说明:
- 顺序编号会紧跟在节点后面,节点最终名称为:节点名+序号,如app20000000001
- 顺序编号是一个递增的计数器
- 顺序编号是由父节点维护,从已有子节点个数开始的,被删除的节点依然算在内
- 如果子节点为空,则从0000000000开始,一次递增1
- 在分布式系统中,顺序编号可以被用于为所有的时间进行全局排序,这样客户端就可以根据序号推断事件的顺序。
2. 查看节点及相关信息
2.1 ls
- 功能:查看指定路径下的内容
- 命令格式: ls [-s] [-w] [-R] path
- -s:查看节点详细信息
- -w :监视该节点
- -R:递归查看
bash
# 查看根节点下的文件
[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:对节点中的内容进行监视
bash
[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 :监视该节点
bash
[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 :监视该节点
bash
[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
bash
[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:删除的版本
bash
[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
bash
[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 命令
bash
[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
bash
# 查看权限
[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
bash
#设置权限
[zk: localhost:2181(CONNECTED) 4] setAcl /app1 world:anyone:cdrwa
5.3 addauth
- 功能:添加认证用户
- 命令格式: addauth scheme auth
bash
[zk: localhost:2181(CONNECTED) 0] addauth digest hn:123
5.4 setquota
- 功能:设置子节点个数和数据长度配额
- 命令格式:setquota -n|-b val path
- -n:子节点个数
- -b:节点数据长度
ZooKeeper具有与其数据模型相关的可配置配额(quota)。 可以设置znode上的配额限制和存储的数据量。如果ZooKeeper命名空间中的一个子树超出与其关联的配额,ZooKeeper会在日志中打印警告消息。但是,如果超出指定的配额,操作并不会取消。
bash
# 设置配额
[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
bash
[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:节点数据长度
bash
# 删除配额
[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
- 功能:断开客户端与服务端的连接。
bash
# 创建临时节点
[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
bash
#关闭连接
[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
bash
[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
bash
[zk: localhost:2181(CONNECTED) 3] sync /zookeeper
Sync is OK
[zk: localhost:2181(CONNECTED) 4]
6.5 history
- 功能:查看执行命令的历史记录
- 命令格式:history
bash
[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
bash
[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
- 功能:查看帮助,查看所有操作命令
bash
[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
bash
[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 ~]#