当前位置: 首页 > news >正文

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

目录

一、zk节点和节点类型

1、节点类型

 2、常用命令

1、客户端链接

 2、常用命令

3、权限控制

相关命令

特性 

授权格式 

测试 


一、zk节点和节点类型

1、节点类型

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

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

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

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

3、EPHEMERAL-临时目录节点

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

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

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

 2、常用命令

1、客户端链接

前提:保证集群启动

使用zkCli.sh默认连接本机

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的命令

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

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

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

ls   /     查看根目录下的内容

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

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

在另外一个会话中执行:

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    // 成功

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Rust光年纪】深入了解Rust语言库:从异步编程到网络协议实现一网打尽
  • 深度学习100问33:如何避免梯度消失
  • 数学基础 -- 线性代数之矩阵的秩
  • Python青少年简明教程:模块
  • IO进程(线程篇)
  • C++复习day01
  • Unity(2022.3.41LTS) - UI详细介绍-画布
  • 【JavaEE初阶】JVM内存划分和类加载过程以及垃圾回收
  • 【数据结构】反射,枚举你必须知道的相关知识
  • 1、Django Admin学习模型
  • yolov8目标检测pyside6可视化图形界面+检测源码ui文件——用于计数统计
  • Elasticsearch:使用 LTR 进行个性化搜索
  • Redis String 类型详解:操作命令、底层编码与使用案例
  • 当采用 JSON 格式的数据进行响应时,对象是否需要序列化取决于什么?
  • 【赵渝强老师】MongoDB的WiredTiger存储引擎
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • classpath对获取配置文件的影响
  • ES6 学习笔记(一)let,const和解构赋值
  • ES6系列(二)变量的解构赋值
  • extjs4学习之配置
  • Git初体验
  • HashMap ConcurrentHashMap
  • LeetCode29.两数相除 JavaScript
  • PAT A1017 优先队列
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 对JS继承的一点思考
  • 构造函数(constructor)与原型链(prototype)关系
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 区块链分支循环
  • 我有几个粽子,和一个故事
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 正则与JS中的正则
  • puppet连载22:define用法
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • (1)常见O(n^2)排序算法解析
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (javascript)再说document.body.scrollTop的使用问题
  • (LLM) 很笨
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (算法)区间调度问题
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)德国人的记事本
  • .“空心村”成因分析及解决对策122344
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net6 webapi log4net完整配置使用流程
  • .NET和.COM和.CN域名区别
  • .net中我喜欢的两种验证码
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @staticmethod和@classmethod的作用与区别
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)