ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

zookeeper05-ZooKeeper的相关命令

2022-01-23 04:00:28  阅读:215  来源: 互联网

标签:zk -- ZooKeeper 命令 2181 path znode zookeeper05 localhost


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.

标签:zk,--,ZooKeeper,命令,2181,path,znode,zookeeper05,localhost
来源: https://www.cnblogs.com/maiblogs/p/15832271.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有