动物园管理员系列ZK命令基本上都是用

在了解ZK的基本原理之前,让我们先简要了解一下常用的ZK命令。熟悉常用的ZK命令有助于排除相关问题或了解基于ZK自主开发系统的场景。比如开发时发现有些Dubbo服务无法调用,可能是因为服务没有注册到ZK或者断开连接;也有可能该公司有一个以ZK为配置中心的自主开发的系统。如果你熟悉ZK命令,你会知道如何实现服务发现注册和配置动态更新。

话不多说,先来了解一下常用的ZK命令吧!

实际上,ZK没有帮助命令。你可以随意输入一两个字符,它就会这样显示出来。只是基于使用Linux的习惯,姑且认为输入help就能打印出ZK支持的命令。

ls命令可以查看指定目录中的节点,使用可选参数可以更详细地查看节点的相关信息。

stat/相当于ls -s/

类似于ls命令,添加-w参数来添加监听。

在3.5版本之后,增加了容器和TTL节点,它们分别由-c和-t创建。所以读者要注意你目前使用的版本。如果版本低于3.5,则没有容器或TTL节点。

特别要解释容器节点和TTL节点的用法:

另外,关于TTL节点的使用,需要注意的是,如果zk是用默认配置文件启动的,而你想创建一个存活时间的节点,比如执行create -t 10 /test,会得到一个错误keeper错误码= Implemented for XXX。解决方法是在启动ZK之前,在配置文件中添加extendedTypesEnabled=true,然后重启ZK(如果是集群部署,重启之前所有ZK都需要修改配置文件)。

配置完成后,重启并执行create -t 10 /test之类的命令,这样就不会出现错误。

示例:获取/演示

例:先查询节点版本号,模拟同一节点并发修改。

Get -s /demo显示当前的dataVersion = 1。

客户端1:set-v 1/demodemo-data 1

客户端2: set-v1/demodemo-data2

客户端1在客户端2之前执行,如果客户端2再次执行,此时会显示错误。

-v version:与set命令类似,-v参数用于确定当前操作的版本。

示例:首先创建一个delNode节点,然后删除它。

在使用create命令之前,有一个acl参数用来设置节点权限,那么应该如何设置呢?

例如:创建/测试ACL演示世界:任意一个:crwda

这行命令的意思是创建节点testAcl,节点值是demo,它的权限策略是所有人都可以执行crwda操作。那么接下来,我们来看看什么是ACL。

ACL的全称是Access Control List,即访问控制列表。ACL可以设置节点的操作权限。那么控制权限的粒度是多少呢?

节点的ACL访问控制用:scheme:id:perm(即例子中的格式-->;世界:任何人:crwda),意思是:

Scheme有哪些授权策略?

ID授权对象有哪些?

有哪些权限?

根据以上参数,我们可以为每个人设置节点权限,一个特定的账号密码,一个特定的ip,这样就可以在更多方面管理节点访问。

值得注意的是,节点可以设置多种授权策略,但是对于上下级节点,权限的设置只对当前节点有效。换句话说,权限之间没有继承关系。即使节点设置了权限,也不会影响上下节点原有的权限!

上面执行了create/test ACL demo world:any one:crwda命令为节点设置权限,那么如何看到节点的权限呢?

很简单。通过执行getAcl节点路径,比如getAcl /testAcl,可以查看相应节点的权限。执行结果如下。

除了在通过执行create命令创建节点时设置权限之外,还可以通过setAcl指定节点设置权限。举个例子,如果我想指定/testAcl只能通过特定的IP操作,执行权限限制在crdw,那么我可以执行setacl/test ACL IP:127 . 0 . 0 . 1:CRWD,再次执行getAcl /testAcl的结果如下:

ZK的一些命令没有被证明,这并不妨碍我们学习ZK的原理。先掌握常用命令,以后有其他场景再根据具体命令学习。

无意中发现了一个带Zookeeper的客户端,有兴趣的读者可以玩玩~友情提示,节点很多的时候可能会打开很慢甚至卡死,所以这个可视化工具可以在本地玩,不建议在生产中使用。这也说明了学习ZK指挥(严肃脸)的重要性。jpg)

解压后进入ZooInspector的构建目录,执行Java-jar zookeeper-dev-zoo inspector . jar启动工具。

连接ZK后可以看到节点的信息和节点的ACL,具体玩法可以自己摸索~

好了,以上是ZK常用命令和可视化工具的基本用法。

参考资料:

从Paxos到Zookeeper的分布式一致性原理与实践

如果你觉得文章不错,请点赞。你的鼓励就是我的动力!文章有不清楚或错误的地方请在评论区留言~