Zookeeper操作命令

1.Zookeeper连接及启停

(1)使用zookeeper安装bin目录下的./zkCli.sh连接到zookeeper服务器上,基本语法如下:
./zkCli.sh -timeout 0 -r -server ip:port
其中,-timeout表示当前会话的超时时间,zookeper依靠与客户端的心跳来判断会话是否有效,单位是毫秒
-r代表只读模式,zookeeper的只读模式指一个服务器与集群中过半机器失去连接以后,这个服务器就不在不处理客户端的请求,但我们仍然希望该服务器可以提供读服务。
-server,指定服务器ip地址和端口号

-s,顺序节点
-e,临时节点
(13)close,关闭当前连接
(14)history,查看历史执行指令
(15)redo,重复执行指令

./zkCli.sh -server localhost:2181

(2)ZK启停
 > 启动ZK服务:        bin/zkServer.sh start
 > 查看ZK服务状态:  bin/zkServer.sh status
 > 停止ZK服务:        bin/zkServer.sh stop
 > 重启ZK服务:        bin/zkServer.sh restart

▼zookeeper学习教程

2.Zookeeper基本操作

1) 创建节点

    格式:create [-s] [-e] path data acl

    其中"-s"表示创建一个"有序"节点,"-e"表示创建一个临时节点.默认为持久性节点

->create -s /test null  
->create /test null  
    如下为包括ACL的例子:

->create -s /test null digest:test:Kk3Nr5X06NH+XdlGMyOrULgK/mo=:rwcda  
    创建一个path为"/test"的节点,值为"null",ACL授权方式为"digest",其中授权的用户名:密码为"test:Kk3Nr5X06NH+XdlGMyOrULgK/mo=",ACL的权限列表为"r""w""c""d""a".

    "digest"授权方式表示client方位此节点数据,需要指定用户名和密码,可以参考zookeeper中DigestAuthenticationProvider.generateDigest(String ipName)方法;通过向此方法指定原始的用户名和密码即可获得"digest"之后的字符串,比如传入"test:test",将会得到"test:V28q/NynI4JI3Rk54h0r8O5kMug=",其内部原理是将"密码"部分进行MD5 + sha1操作.再zkCli.sh指令上你需要传递digest之后的字符串.

    其中ACL的授权方式有很多种,你可以在ZooDefs类中找到更多的信息.

    最后一个参数为权限列表,r表示"read",w表示"write",c表示"create",d表示"delete",a表示"admin"



2) 获取节点数据

    格式:get path   

-> get /test  
-e  
cZxid = 0x5b  
ctime = Mon Sep 16 14:14:06 CST 2013  
mZxid = 0x5b  
mtime = Mon Sep 16 14:14:06 CST 2013  
pZxid = 0x67  
cversion = 7  
dataVersion = 0  
aclVersion = 0  
ephemeralOwner = 0x0  
dataLength = 2  
numChildren = 5  
    你可以从结果列表中,获得所有的节点信息.


3) 查看子节点列表

    指令: ls /path

4) 设置节点值

    格式: set path data [version]

-> set /test 1313131 -1  
    其中值需要为字符串,版本号可以通过2)中的指令获取,如果版本号为"-1"表示更新时忽略版本校验.


5) 删除所有节点

    格式: rmr path

-> rmr /test  
    将会删除"/test"以及其下的所有子节点.



6)  设置ACL

    格式: setAcl path acl


-> setAcl /test digest:test:Kk3Nr5X06NH+XdlGMyOrULgK/mo=:rwcda  
    和create指令非常相似.



7) 删除节点

    格式: delete path [version]


-> delete /test -1  
    需要注意的是,如果此path下还有子节点,将导致删除失败.这是和"rmr"指令的区别.



8) 添加授权信息

    格式: addauth schema auth


-> addauth digest test:test  
   只有授权之后,才能够访问那些具有ACL控制的节点数据.注意"auth"信息为原始的用户名和密码,而不是经过DigestAuthenticationProvider签名之后的.  如果使用了错误的授权信息,可能导致"Authentication is not valid : ".


3.使用ACL控制Zookeeper

zookeeper使用ACL来控制对znode(zookeeper的数据节点)的访问权限。ACL的实现方式和unix的文件权限类似:用不同位来代表不同的操作限制和组限制。与标准unix权限不同的是,zookeeper的节点没有三种域——用户,组,其他。zookeeper里没有节点的所有者的概念。取而代之的是,一个由ACL指定的id集合和其相关联的权限。 注意,一个ACL只从属于一个特定的znode。对这个znode子节点也是无效的。例如,如果/app只有被ip172.16.16.1的读权限,/app/status有被所有人读的权限,那么/app/status可以被所有人读,ACL权限不具有递归性。 zookeeper支持插件式认证方式,id使用scheme:id的形式。scheme是id对应的类型方式,例如ip:172.16.16.1就是一个地址为172.16.16.1的主机id。 当客户端连接zookeeper并且认证自己,zookeeper就在这个与客户端的连接中关联所有与客户端一致的id。当客户端访问某个znode时,znode的ACL会重新检查这些id。ACL的表达式为(scheme:expression,perms)expression就是特殊的scheme,例如,(ip:19.22.0.0/16, READ)就是把任何以19.22开头的ip地址的客户端赋予读权限。

ACL权限

ZooKeeper支持下列权限:

  • CREATE:允许创建子节点

  • READ:允许获得节点数据并列出所有子节点

  • WRITE:允许设置节点上的数据

  • DELETE:允许删除子节点

  • ADMIN:允许设置权限

CREATE和DELETE操作是更细的粒度上的WRITE操作。有一种特殊的情况:

  • 你想要A获得操作zookeeper上某个znode的权限,但是不可以对其子节点进行CREATE和DELETE。

  • 只CREATE不DELETE:某个客户端在上一级目录上通过发送创建请求创建了一个zookeeper节点。你希望所有客户端都可以在这个节点上添加,但是只有创建者可以删除。(这就类似于文件的APPEND权限)

Zookeeper提供的权限信息表

 

权限

描述

setAcl中的简写

write

能够设置znode的值

w

read

能够读取znode的值和列出它的children znode

r

create

能够创建children znode

c

delete

能够删除children znode

d

admin

能够执行setAcl即设置访问控制列表

a

all

所有权限

wrcda

zookeeper没有文件所有者的概念,但有ADMIN权限。在某种意义上说,ADMIN权限指定了所谓的所有者。zookeeper虽然不支持查找权限(在目录上的执行权限虽然不能列出目录内容,却可以查找),但每个客户端都隐含着拥有查找权限。这样你可以查看节点状态,但仅此而已。(这有个问题,如果你在不存在的节点上调用了zoo_exists(),你将无权查看)

内建ACL模式

ZooKeeper有下列内建模式:

  • world 有独立id,anyone,代表任何用户。

  • auth 不使用任何id,代表任何已经认证过的用户

  • digest 之前使用了格式为username:password的字符串来生成一个MD5哈希表作为ACL ID标识。在空文档中发送username:password来完成认证。现在的ACL表达式格式为username:base64, 用SHA1编码密码。

  • ip 用客户端的ip作为ACL ID标识。ACL表达式的格式为addr/bits,addr中最有效的位匹配上主机ip最有效的位。


setAcl 二种模式:

一种是setAcl /path digest:username:encrypedpwd:crwda 用这种方式时,encrypedpwd用户必须是密文

另一种方式是先addauth digest:usrname:password 先把授权信息加入上下文,这里password用的是明文,然后再setAcl /path auth:username:password:crdwa

所以如果在cli控制台测试,强烈建议用第二种方式,否则象上图中的方式用错了方式,pwd-b1在zk中被认为是密文,要解密出来几乎不可能,所以设置后,相当于这个节点就废了,因为你不知道密码,要操作该节点时,提供不了正确的认证信息)

权限组合的测试结果:

要修改某个节点的ACL属性,必须具有read、admin二种权限

要删除某个节点下的子节点,必须具有对父节点的read权限,以及父节点的delete权限


4.使用shell操作Zookeeper

1.查看哪个节点被选择作为follower或者leader


echo stat | nc 127.0.0.1 2181|grep Mode

2.测试服务是否启动(返回imok表示已经启动)


echo ruok | nc 127.0.0.1 2181

3.查看服务配置的详细信息


echo conf | nc 127.0.0.1 2181

4.查看服务环境的详细信息


echo envi | nc 127.0.0.1 2181

5.列出未经处理的会话和临时节点


echo dump | nc 127.0.0.1 2181

6.查看连接到服务端的客户端信息


echo cons | nc 127.0.0.1 2181

7.查看未经处理的请求


echo reqs | nc 127.0.0.1 2181

8.查看服务的watch详细信息


echo wchs | nc 127.0.0.1 2181

9.服务运行信息


参考:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/2877.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注