zookeeper05-ZooKeeper的相关命令

1、zkCli.sh脚本的使用方法

  • 官方手册:https://zookeeper.apache.org/doc/current/zookeeperCLI.html

1.1、连接和退出ZooKeeper服务器

1、连接到ZooKeeper服务器

  • 使用ZooKeeper客户端(zkCli.sh)连接到ZooKeeper服务器的语法是:
zkCli.sh -timeout 5000 -r -server ip1:port1[,ip2:port2,ip3:port3]
    -timeout:表示客户端向ZooKeeper服务器发送心跳的时间间隔,单位为毫秒。因为客户端与服务器的连接状态是通过心跳检测来维护的,如果在指定的时间间隔内,客户端没有向服务器发送心跳包,服务器则会断开与客户端的连接。参数5000,表示客户端向服务器发送心跳的间隔为5秒。
    -r:表示客户端以只读模式连接
    -server:指定客户端要连接的服务器IP与端口,服务器默认的端口为2181

示例:

]# zkCli.sh    #相当于zkCli.sh -server 127.0.0.1:2181

]# zkCli.sh -timeout 5000 -r -server 10.1.1.10:2181

--会随机连接到后面三个ZooKeeper服务器之一
]# zkCli.sh -server 10.1.1.10:2181,10.1.1.11:2181,10.1.1.12:2181

2、关闭连接

  • close命令会关闭当前客户端连接
[zk: localhost:2181(CONNECTED) 0] close

WATCHER::

WatchedEvent state:Closed type:None path:null
2021-12-26 21:48:31,454 [myid:] - INFO  [main:ZooKeeper@1422] - Session: 0x100001117980000 closed
2021-12-26 21:48:31,459 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@524] - EventThread shut down for session: 0x100001117980000

3、连接到ZooKeeper服务器

connect [host:port]
    host:port:ZooKeeper服务器IP和端口

示例:

[zk: localhost:2181(CLOSED) 1] connect 127.0.0.1:2181

4、退出zkCli.sh终端

[zk: 127.0.0.1:2181(CONNECTED) 2] quit

WATCHER::

WatchedEvent state:Closed type:None path:null
2021-12-26 21:49:06,266 [myid:] - INFO  [main:ZooKeeper@1422] - Session: 0x100001117980001 closed
2021-12-26 21:49:06,269 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@524] - EventThread shut down for session: 0x100001117980001

1.2、查询znode

1、查询子znode列表

ls [-s] [-w] [-R] path
    path:znode路径
    -s:显示path状态(元数据)的详细信息
    -w:监听path的子znode列表变化(如果path下子znode的数量有变化,就会触发监视点)
    -R:递归显示子znode

--ls2已弃用
ls2 path [watch]

示例:

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls -s /
[zookeeper]cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

[zk: localhost:2181(CONNECTED) 2] ls -R /
/
/zookeeper
/zookeeper/config
/zookeeper/quota
[zk: localhost:2181(CONNECTED) 3] ls -w /
[zookeeper]

2、获取znode状态

stat [-w] path
    path:znode路径
    -w:监听path znode的状态(元数据)变化

示例:

[zk: localhost:2181(CONNECTED) 8] stat /test1
cZxid = 0x100000011                     --cZxid:创建znode的事务id
ctime = Sun Dec 26 19:33:43 CST 2021    --ctime:创建znode的时间
mZxid = 0x100000011                     --mZxid:修改znode的事务id
mtime = Sun Dec 26 19:33:43 CST 2021    --mtime:修改znode的时间
pZxid = 0x100000011                     --pZxid:子znode列表最后一次修改的事务id。删除或添加子znode,不包含修改子znode的数据。
cversion = 0                            --cversion:子znode的版本号,删除或添加子znode,版本号会自增
dataVersion = 0                         --dataVersion:znode数据版本号,数据写入操作,版本号会递增
aclVersion = 0                          --aclVersion:znode ACL权限版本,权限写入操作,版本号会递增
ephemeralOwner = 0x0                    --ephemeralOwner:临时znode创建时的事务id,如果是永久znode,则它的值为0
dataLength = 0                          --dataLength:znode数据长度(单位:byte),中文占3个byte
numChildren = 0                         --numChildren:子znode数量

1.3、创建、删除znode

1、创建znode

create [-s] [-e] [-c] [-t ttl] path [data] [acl]
    path:znode路径
    -s:创建有序znode。(自动为有序znode加上编号)
    -e:创建临时znode,默认是持久znode。(会话断开时,该会话的临时znode被删除)
    -c:创建容器znode。当容器的最后一个子容器被删除时,该容器将被删除
    -t:创建TTL节点。需要在zoo.cfg中设置zookeeper.extendedTypesEnabled=true
    data:存储在znode中的数据
    acl:设置子znode访问权限,默认所有人都可以对该znode进行读写操作

示例:

--创建持久znode
[zk: localhost:2181(CONNECTED) 0] create /test1
Created /test1
--创建临时znode
[zk: localhost:2181(CONNECTED) 1] create -e /test2
Created /test2
--创建持久有序的znode
[zk: localhost:2181(CONNECTED) 2] create -s /test3
Created /test30000000001
--创建临时有序的znode
[zk: localhost:2181(CONNECTED) 3] create -e -s /test4
Created /test40000000001

2、删除znode

--删除znode,该znode不能有子znode
delete [-v version] path
    path:znode路径
    -v:znode版本号(znode状态cversion的值)。如果传递了版本号,则必须保证和服务器上的版本号一致,否则会报错:version No is not valid

--删除znode,包含其子znode(会递归删除子znode,再删除znode本身)
deleteall path

--已弃用
rmr path

示例:

[zk: localhost:2181(CONNECTED) 0] delete /test1
[zk: localhost:2181(CONNECTED) 1] delete /test2
Node not empty: /test2
[zk: localhost:2181(CONNECTED) 2] deleteall /test2

1.4、查看、设置znode数据

1、获取znode数据

get [-s] [-w] path
    path:znode路径
    -s:显示path状态(元数据)的详细信息
    -w:监视path znode中的数据变化

2、设置znode数据

set [-s] [-v version] path data
    path:znode路径
    data:znode数据
    -s:显示path状态(元数据)的详细信息
    -v:数据版本号(znode状态dataVersion的值)。如果传递了版本号,则必须保证和服务器上的版本号一致,否则会报错。

1.5、znode配额

1、查询znode配额

listquota path 
    path:znode路径

2、设置znode配额

  • znode可以存储数据,也可以创建子znode,但是如果不做控制,znode数据可以无限大,子znode数量也可以创建无数个,所以在有些场景下需要对znode的数据和子znode的数量需要做一些限制,zk为我们提供了setauota命令实现对子znode的限制功能。但是,zk并不是真正在的物理上对znode做了限制,而是如果超过了znode限制,会在zk的日志文件中记录配额超限的警告信息。
setquota -n|-b val path 
    path:znode路径
    -n:限制子znode的数量
    -b:限制znode的数据长度
    val:如果参数是-n,val表示限制子znode的数量。如果参数是-b,val表示限制znode的数据长度

3、删除znode配额

delquota [-n|-b] path 
    path:znode路径
    -n:删除子znode数量配额限制
    -b:删除znode数据长度配额限制

示例:

[zk: localhost:2181(CONNECTED) 0] create /test1
Created /test1
--查看/test1的配额
[zk: localhost:2181(CONNECTED) 1] listquota /test1 
absolute path is /zookeeper/quota/test1/zookeeper_limits
quota for /test1 does not exist.
--设置/test1的配额
[zk: localhost:2181(CONNECTED) 2] setquota -n 2 /test1
[zk: localhost:2181(CONNECTED) 3] listquota /test1 
absolute path is /zookeeper/quota/test1/zookeeper_limits
Output quota for /test1 count=2,bytes=-1    --表示znode的配额信息,限制该znode最多有2个子znode,znode数据为-1,表示不限制
Output stat for /test1 count=1,bytes=0      --表示当前znode的状态信息,该znode有1个子znode,znode数据长度为0
--删除/test1的配额
[zk: localhost:2181(CONNECTED) 4] delquota /test1
[zk: localhost:2181(CONNECTED) 5] listquota /test1 
absolute path is /zookeeper/quota/test1/zookeeper_limits
quota for /test1 does not exist.

1.6、znode的ACL

1、获取znode ACL

getAcl [-s] path
    path:znode路径
    -s:显示path状态(元数据)的详细信息

2、设置znode ACL

  • 创建znode时如果没有设置acl权限,默认为所有用户都可以对该znode进行读写操作。
setAcl [-s] [-v version] [-R] path acl
    path:znode路径
    acl:设置子znode访问权限,默认所有人都可以对该znode进行读写操作
    -s:显示path状态(元数据)的详细信息
    -v:acl版本号(znode状态aclVersion的值)。如果传递了版本号,则必须保证和服务器上的版本号一致,否则会报错。
    -R:递归设置acl

示例:

[zk: localhost:2181(CONNECTED) 0] create /test1
Created /test1
[zk: localhost:2181(CONNECTED) 1] getAcl /test1 
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 2] setAcl /test1 ip:10.1.1.12:cdrwa
[zk: localhost:2181(CONNECTED) 3] getAcl /test1    --要操作该znode,需要登录zkCli.sh -server 10.1.1.12:2181
Authentication is not valid : /test1

1.7、历史命令

1、查看历史命令

history

2、执行历史命令

redo cmdno
    cmdno:历史命令编号

示例:

[zk: localhost:2181(CONNECTED) 0] ls /
[test1, zookeeper]
[zk: localhost:2181(CONNECTED) 1] get /zookeeper 
ss
[zk: localhost:2181(CONNECTED) 2] history    --查看历史命令
0 - ls /
1 - get /zookeeper 
2 - history
[zk: localhost:2181(CONNECTED) 3] redo 0     --执行历史命令
[test1, zookeeper]

1.8、服务器配置

1、配置信息

  • 显示仲裁成员的配置
config [-c] [-w] [-s]

2、重新配置信息

  • 在运行时更改集群的成员。
  • 先决条件:
    • 在zoo.cfg中设置reconfigEnabled=true
    • 添加超级用户或skipAcl,否则将得到“权限不足”。(e.g. addauth digest zookeeper:admin)
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
    -s:
    -v:如果传递了版本号,则必须保证和服务器上的版本号一致,否则会报错。
    -file:使用文件进行重配置。
    -members:全量重配置。
    -add...-remove:增量重配置。

示例:

--将服务器2改为观察者,并将其端口从2182更改为12182;将服务器5添加到集群中,并设置为观察者;将服务器4从集群中移除。
reconfig --add 2=localhost:2781:2786:observer;12182 --add 5=localhost:2781:2786:observer;2185 -remove 4

--全量重配置
reconfig -members server.1=localhost:2780:2785:participant;0.0.0.0:2181,server.2=localhost:2781:2786:observer;0.0.0.0:12182,server.3=localhost:2782:2787:participant;0.0.0.0:12183

--将当前配置更改为myNewConfig.txt中的配置
reconfig -file /data/software/zookeeper/zookeeper-test/conf/myNewConfig.txt
    /data/software/zookeeper/zookeeper-test/conf/myNewConfig.txt
    server.1=localhost:2780:2785:participant;0.0.0.0:2181
    server.2=localhost:2781:2786:observer;0.0.0.0:12182
    server.3=localhost:2782:2787:participant;0.0.0.0:2183
    server.5=localhost:2784:2789:observer;0.0.0.0:2185

1.9、其他命令

1、给当前客户端添加授权信息

addauth scheme auth
    scheme:授权方式
    auth:权限

2、与leader同步数据

  • 在leader和follower之间同步一个节点的数据(异步同步)
sync path
    path:znode路径

3、打开或关闭监听日志

  • 在获取znode数据、子znode列表等操作时,都可以添加watch参数监听znode的变化,从而znode数据更改、子znode列表变更时收到通知,并输出到控制台。默认是打开,可以设置参数将其关闭。
printwatches on|off
on:打开
off:关闭

4、删除监听器

removewatches path [-c|-d|-a] [-l]

2、四字母命令

  • 四字母命令提供了一种简单的方法来对系统进行各种检查。它的主要目的是提供一个非常简单的协议,可以与简单的工具(如telnet和nc)一起使用,以检查系统健康状况和诊断问题。

1、ruok

  • 提供(有限的)服务器的状态信息。如果服务器正在运行,就会返回"imok"的响应信息。事实上"OK"状态只是一个相对的概念,例如,服务器运行中,虽无法与集群中其他服务器进行通信,然而该服务器返回的状态仍然是"OK" 。对于更详细更可靠的健康状态检查,需要使用stat命令。

2、stat

  • 提供了服务器的状态信息和当前活动的连接情况。状态信息包括一些基本的统计信息,还包括该服务器当前是否处于活动状态(如果它是leader或follower),该服务器所知的最后的zxid信息。某些统计信息为累计值,我们可以使用srst命令进行重置。

3、srvr

  • 提供的信息与stat一样,只是忽略了连接信息。

4、mntr

  • 提供了比stat命令更加详细的统计数据。每行输出的格式为:key<tab>value。(leader还将列出只用于leader的附加参数)

5、dump

  • 提供会话信息,列出当前活动的会话信息以及这些会话的过期时间。该命令只能在leader上运行。

6、conf

  • 列出该服务器启动时所使用的基本配置参数。

7、envi

  • 列出各种Java环境参数。

8、wchs

  • 列出服务器跟踪的监视点的简短摘要信息。

9、wchc

  • 列出服务器跟踪的监视点的详细信息,根据会话进行分组。

10、wchp

  • 列出服务器跟踪的监视点的详细信息,根据监视的znode路径进行分组。

11、cons, crst

  • cons命令列出服务器上每个连接的详细统计信息。crst将所有连接计数器重置为零。

示例:

  •  在没有开启可以执行四字母命令前,服务器会拒绝执行命令。
]# echo conf | nc 127.0.0.1 2181
conf is not executed because it is not in the whitelist.
  • 开启执行四字母命令的权限,在zoo.cfg文件里加入配置项:
#开启四字母命令,要重启服务
4lw.commands.whitelist=*
  •  使用与nc命令结合使用
]# echo ruok | nc 127.0.0.1 2181
imok
  • 使用与telnet命令结合使用
]# telnet 127.0.0.1 2181
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ruok                     --四字母命令
imok                     --命令的输出
Connection closed by foreign host.
上一篇:Android项目实战(二十):浅谈ListView悬浮头部展现效果


下一篇:linux基础篇--复习重点成长之路