运维学习————Zookeeper(2)

目录

一、zk节点和节点类型

1、节点类型

 2、常用命令

1、客户端链接

 2、常用命令

3、权限控制

相关命令

特性 

授权格式 

测试 


一、zk节点和节点类型

运维学习————Zookeeper(2)_第1张图片

1、节点类型

1、PERSISTENT--持久化目录节点

客户端与zookeeper断开连接后,该节点依旧存在

2、PERSISTENT_SEQUENTIAL-目持久化顺序编号录节点

客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

3、EPHEMERAL-临时目录节点

客户端与zookeeper断开连接后,该节点被删除,临时节点不可以创建子节点

4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

 2、常用命令

1、客户端链接

前提:保证集群启动

使用zkCli.sh默认连接本机

运维学习————Zookeeper(2)_第2张图片

close     关闭会话

quit        退出  或者直接使用quit

 

或者使用 zkCli  -server  ip或者主机名:端口号   链接相应服务器

zkCli.sh  -server 192.168.23.11:2181

zkCli.sh  -server cluster3:2181

或者是在zk命令行: connect    ip地址或者主机名称:端口号, 链接相应服务器

[zk: 192.168.23.12:2181(CONNECTED) 0]connect 192.168.170.42:2181

connect  cluster3:2181

quit  退出

 2、常用命令

help(随便敲一个不存在的命令)   帮助命令,会显示所有zk的命令

运维学习————Zookeeper(2)_第3张图片

ls  存储路径  查看路径下的信息(路径必须是绝对路径)

ls [-s] [-w] [-R] path

列出子节点  -s状态( State) -R 递归查看所有子节点(Recursive)-w 添加监听(watch)

ls   /     查看根目录下的内容

ls  -R   /       递归查看根节点所有子节点

ls -w  /    查看并监听根目录,如果根下子节点发生变化都会被监听到,但是只监听一次(提高zk效率)

运维学习————Zookeeper(2)_第4张图片

在另外一个会话中执行:

create   /frame1   'frame1'

create   /frame2   'frame2'    发现只有一次有监控信息

在原会话中执行

ls -w /

在另外一个会话中执行:

delete /frame2

delete /frame1   发现只有一次有监控信息

 
 

close 关闭与服务端的链接

close

quit  退出

create [-s] [-e]   path [data] [acl]

-s   创建有序节点

-e  创建临时节点

data     节点内容

acl(access control  list)  访问控制权限

 
 

创建持久节点

create /frame  'frame'

create  /frame/spring   'spring'

ls  /frame

close

quit

zkCli.sh     再次连接,发现会话ID发生变化,说明不上一次会话

ls   /

ls  /frame   断开会话后持久化节点依然存在

 

创建持久有序节点

create -s  /frame/spring/ioc  'ioc1'

create -s  /frame/spring/ioc  'ioc2'

create -s  /frame/spring/ioc  'ioc3'

ls  /frame/spring        发现3个持久有序节点

quit  退出

zkCli.sh     再次连接,发现会话ID发生变化,说明不上一次会话

ls  /frame/spring        发现3个持久有序节点依然存在

create  /frame/spring/ioc0000000000/ioccontainer  'iocc'   在持久有序节点下还可以创建子节点

ls /frame/spring/ioc0000000000
总结: 只要持久节点,都可以有子节点

创建临时节点:create -e   路径   “字符串信息”   (-e是创建短暂节点)

create -e /frame/spring/aop  'aop'

ls -s   /frame/spring/aop     发现 ephemeralOwner 就是依赖当前会话ID

ls -s /

ls -s /frame      发现持久节点 ephemeralOwner 都是0x0

create /frame/spring/aop/cglibproxy 'cglibproxy'

create -e /frame/spring/aop/cglibproxy 'cglibproxy'   都错误  临时节点不能有子节点



 

创建 临时有序节点

 create -e -s  /frame/spring/mvc 'mvc1'

 create -e -s  /frame/spring/mvc 'mvc2'

 create -e -s  /frame/spring/mvc 'mvc3'

 ls /frame/spring

create -e -s  /frame/spring/mvc0000000005/ds 'DespatcherServlet'

ls -s   /frame/spring/mvc0000000005      发现 ephemeralOwner 就是依赖当前会话ID

quit

zkCli.sh

ls /frame/spring/   退出quit当前节点,再次链接zkCli.sh查看,发现临时节点不存在

总结:   只要是临时节点,都不可以有孩子

get [-s] [-w] path

查看节点数据  -s 包含节点状态   -w 添加监听

get /frame/spring

get -s  /frame/spring

set  /frame/spring 'spirng1'

get -s  /frame/spring

set  /frame/spring 'spirng111'

get -s  /frame/spring

create  /frame/spring/boot  'boot'

get -s  /frame/spring

delete /frame/spring/boot 

get -s  /frame/spring

get -w /frame/spring   查看节点内容并监控   但是也是只监控一次

在另外一个会话中,改变/frame/spring的内容

set  /frame/spring 'spirng4'

set  /frame/spring 'spirng5'   发现只有一次可以触发监控

 

zxid:节点创建时的zxid

ctime:节点创建时间

mZxid:节点最近一次更新时的zxid

mtime:节点最近一次更新的时间

pZxid: 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID

cversion:子节点更新次数

dataVersion:本节点数据更新次数

aclVersion:节点ACL(授权信息)的更新次数

ephemeralOwner:如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0

dataLength:节点数据长度,本例中为hello world的长度

numChildren:子节点个数

set 更新节点内容:

set /frame/spring 'spring1'   更新节点内容

 

delete [-v version]  path删除单个节点

删除节点,(不能存在子节点)

delete /frame/spring/mvc0000000008

create /frame/spring/boot 'boot'

create /frame/spring/boot/sarun  'SpringApplicationrun'

delete /frame/spring/boot    错误

deleteall path

删除路径及所有子节点

deleteall /frame/spring/boot

 stat查看节点的状态

stat /frame/spring

setquota增加配额

setquota  -n|-b val path

-n 设置子节点的配额数量

-b  设置节点内容的长度

setquota -n 3  /frame   为/frame路径设置子节点数量限制    包含自己在内,最多3个子节点

listquota  /frame    查看配额

ls /frame   查看子节点

在另外一个会话中打开日志:

tail -f /usr/zookeeper/logs/zookeeper-root-server-cluster1.out 

create /frame/mybatis  'ORM'

create /frame/hibernate  'ORM'    第二次创建目录时就会提示

 
 

listquota查询配额

listquota path

-1 表示无限, 即没有限制(还需要设置setquota -n -1 path)

 listquota  /frame 

 

delquota删除配额

delquota [-n|-b] path

delquota  /frame   删除所有配额

注意:一次会话只能对n或者b一个进行操作,如果想操作另外一个,需要重新连接

3、权限控制

ACL:Access Control List  访问控制列表

相关命令

getAcl  获取某个节点的acl权限信息

setAcl  设置某个节点的acl权限信息

addauth  输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密后的形式存在的

特性 

ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限

  每个znode支持设置多种权限控制方案和多个权限

  子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点

授权格式 

授权策略:授权对象: 权限

scheme:     id:      Permission 

Scheme:(计划)授权的策略 包含下面:

world:默认方式,相当于全部都能访问 代表所有人

ip:使用客户端的主机IP作为ACL ID 。这个ACL表达式的格式为addr/bits ,此时addr中的有效位与客户端addr中的有效位进行比对。

auth:使用已添加认证的用户认证(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)

digest:即用户名:密码这种方式认证,这也是业务系统中最常用的。用 username:password 字符串来产生一个MD5串,然后该串被用来作为ACL ID。认证是通过明文发送username:password 来进行的,当用在ACL时,表达式为username:base64 ,base64是password的SHA1摘要的编码。
 

ID:授权的对象

权限赋予的用户或者一个实体,例如:IP 地址  或者是用户(授权) 或者是      anyone

Permission:授予的权限CRWDA

zookeeper支持的权限

CREATE(c): 创建权限,可以在在当前node下创建child node

READ(r): 读权限,可以获内容及子节点

WRITE(w): 写权限,可以向当前node写数据

DELETE(d): 删除权限,可以删除当前的child nodes

ADMIN(a): 管理权限,可以设置当前node的permission

测试 

world:

getAcl  /aaa   //获取原来权限列表

setAcl /aaa world:anyone:cda   //设置新的访问权限列表

getAcl /aaa   //再次查看

get /aaa     //没有r时,不可以查看节点内容

setAcl /aaa world:anyone:crwda     //设置为原来的

get /aaa   //又可以查看

 

ip:

create /a1 'a1'  //创建新节点

setAcl /a1 ip:127.0.0.1:crwda

getAcl /a1

get  /a1  //获取不到数据

quit //退出

zkCli.sh  -server 127.0.0.1:2181 //重新登录

get  /a1 //获取到数据

setAcl /a1   ip:192.168.23.91:cdwra,ip:192.168.23.92:cdwra

                getAcl /a1

quit

zkCli.sh  -server 192.168.23.91:2181 //重新登录,限制只能是本机登录

get /a1 //可以获取

zkCli.sh  -server 192.168.23.93:2181 //在93登录

get /a1 //不可以

 

auth:

create /a2 'a2'

getAcl  /a2

addauth digest scott:tiger    #增加授权用户,明文用户名和密码

setAcl /a2 auth:scott:cdwra #授予权限

getAcl /a2   //设置时为明码,查看时,加密过的

get  /a2  可以查看

重新链接后,需要再次添加授权用户才可以查看:

addauth digest admin:123 // 设置错误的认证信息

get /a2  // 不可以查看

addauth digest scott:tiger  //设置正确的认证信息

get  /a2  //可以

 

digest:

create  /a3  'a3'

getAcl /a3

setAcl /a3  digest:user:6DY5WhzOfGsWQ1XFuIyzxkpwdPo=:crwda  #授权

getAcl /a3

rmr /a3  #直接删除没权限

addauth digest user:123456   #增加认证用户

rmr /a3    // 成功

你可能感兴趣的:(学习)