Zookeeper(2)---节点属性、监听和权限
之前通过客户端连接之后我们已经知道了zk相关的很多命令(Zookeeper(1)---初识)。
节点属性:
现在我们就通过stat指令来看看节点都有哪些属性,或者使用get 指令和-s参数来查看节点数据以及属性

abc 节点数据
cZxid = 0x5 创建节点的事务ID
ctime = Sat Oct 17 15:25:43 CST 2020 创建时间
mZxid = 0xc 修改节点的事务ID(修改当前节点数据)
mtime = Wed Oct 21 22:51:14 CST 2020 最后修改时间
pZxid = 0x6 子节点变更(增加和删除,数据修改不会影响该ID)的事务ID
cversion = 1 子节点进行的更改(增加和删除,数据修改不会影响该ID)次数(不包括子节点)
dataVersion = 1 数据版本
aclVersion = 0 权限变化版本 access control list
ephemeralOwner = 0x0 字面翻译临时节点拥有者,持久节点值为0,非持久节点不为0(会话ID)
dataLength = 3 数据长度
numChildren = 1 子节点数量(不包括子子节点)
监听:
我们可以通过-w参数对一些节点设置监听,适用于分布式保障数据一致性的场景。多个服务同时监听一个节点,当这个节点发生对应的变化时,就会通知到监听了该节点的所有服务。
比如之前说的配置信息发生变化,每个服务获取到变更信息之后进行变更,而不需要一个一个服务的去操作。
ls -w 监听子节点的变化(增,删)
get -w 监听节点数据的变化
stat -w 监听节点属性的变化
printwatches on|off 触发监听后,是否打印监听事件(默认on)
现在我们开启两个客户端来看看上面的这些监听操作
1.数据变化监听 get -w
客户端添加监听

客户端2修改数据

客户端1监听到数据变化

可以看到监听的了数据变化
如果我们再次修改数据,会发现无法再次监听到变化了。因为这个监听是一次性的,只会出发一次,如果还需要监听需要重新设置监听
2.节点变化(增、删)ls -w
这个监听可以用于服务心跳维护或者服务注册。监听一个持久节点,每个服务上线的时候在该持久节点下面,新增一个临时(序号)节点,date可以存放ip信息和端口。当某个服务宕机的时候,该节点的子节点变化就会被监听到了。
客户端1监听

客户端2新增节点

客户端1监听到节点变化

3.监听属性变化 stat -w
这个监听相当于就是前面两个监听的汇总,数据修改,子节点变更都会涉及到属性变化
权限设置:
Access Control List(访问控制列表),用于控制节点的访问操作权限
基于scheme:id:permission的方式进行权限控制。scheme表示授权模式、id模式对应值、permission即具体的增删改权限位。
scheme:认证模型
world 开放模式, world表示全世界都可以访问(这是默认设置)
ip ip模式, 限定客户端IP防问
auth 用户密码认证模式,只有在会话中添加了认证才可以防问
digest 与auth类似,区别在于auth用明文密码,而digest 用sha-1+base64加密后的密码
permission权限位
c CREATE 可以创建子节点
d DELETE 可以删除子节点(仅下一级节点)
r READ 可以读取节点数据及显示子节点列表
w WRITE 可以设置节点数据
a ADMIN 可以设置节点访问控制列表权限
acl 相关命令:
getAcl getAcl <path> 读取ACL权限
setAcl setAcl <path> <acl> 设置ACL权限
addauth addauth <scheme> <auth> 添加认证用户(addauth digest <用户名>:<密码>)
开放模式:只有一个值anyone, 未设置写权限,无法写入数据:

Ip模式:
setAcl /apps ip:127.0.0.1:ra
setAcl /apps ip:127.0.0.1/101:ra 网段设置
digest 权限示例:
- setAcl <path> digest :<用户名>:<密钥>:<权限位>
- addauth digest <用户名>:<密码>
注1:密钥 通过sha1与base64组合加密码生成,可通过以下命令生成
echo -n <用户名>:<密码> | openssl dgst -binary -sha1 | openssl base64
注2:为节点设置digest 权限后,访问前必须执行addauth,当前会话才可以防问。
ACL的特殊说明:
权限仅对当前节点有效,不会让子节点继承。如限制了IP防问A节点,但不妨碍该IP防问A的子节点
Zookeeper(2)---节点属性、监听和权限的更多相关文章
- vue对象属性监听
对象属性监听的两种方法: 1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValu ...
- 迷你MVVM框架 avalonjs 学习教程15、属性监听与模块通信
avalon的ViewModel对象从其内部EventManager里继承了三个方法,$watch.$unwatch.$fire三个方法,它们就是我们本节的主题. 词如其名,非常直白,一看就知道做什么 ...
- 微信小程序实现watch属性监听数据变化
Vue 提供了一种通用的方式来观察和响应 Vue 实例上的数据变动:监听属性 watch. 虽然watch的滥用会导致性能不佳,但在一些情况下我们还是需要watch,使得代码更加简洁.逻辑更加清晰(其 ...
- Vue 变量,成员,属性监听
Vue变量 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...
- Vue之计算属性Computed和属性监听Watch,Computed和Watch的区别
一. 计算属性(computed) 1.计算属性是为了模板中的表达式简洁,易维护,符合用于简单运算的设计初衷. 例如: <div id="app"> {{ myname ...
- Vue.js之计算属性(computed)、属性监听(watch)与方法选项(methods)
vue.js官网:https://cn.vuejs.org/v2/guide/components-registration.html 一.计算属性-computed 1. 作用:能够避免数据冗余,通 ...
- vue2.x版本中Object.defineProperty对象属性监听和关联
前言 在vue2.x版本官方文档中 深入响应式原理 https://cn.vuejs.org/v2/guide/reactivity.html一文的解释当中,Object.defineProperty ...
- Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)
8.1.常用命令 启动ZK服务 bin/zkServer.sh start 查看ZK服务状态 bin/zkServer.sh status 停止ZK服务 bin/zkServer.sh stop 重启 ...
- ZooKeeper个人笔记之节点的监听
create public String create(String path, byte[] data, List<ACL> acl, CreateMode createMode) th ...
随机推荐
- Oracle学习(十二)标量函数
UCASE()大写转换 LCASE()小写转换 --把查询结果对应的列进行大写转换 SELECT UCASE(列) FROM 表; --把查询结果对应的列进行小写转换 SELECT LCASE(列) ...
- 手撸Mysql原生语句--多表
在开始之前,我们需要建立表,做建表和数据的准备的工作. 1.建表 create table department( id int, name varchar(20) ); create table e ...
- 详细分析 Java 中启动线程的正确和错误方式
目录 启动线程的正确和错误方式 前文回顾 start 方法和 run 方法的比较 start 方法分析 start 方法的含义以及注意事项 start 方法源码分析 源码 源码中的流程 run 方法分 ...
- if else与switch for与foreach
if...else...适用于变量判断 switch适用于常量判断(switch只判断一次,if else 判断多次) foreach只适用于集合和数组查询(foreach不支持增加删除操作) for ...
- 秋天的第一份“干货” I Referer 防盗链,为什么少了个字母 R?
Referer 为什么叫 Referer?它代表什么意思?在诸多防盗链竞争中它有什么优势? 今天,在聊 Referer 防盗链之前,先来聊聊我们在现实生活中常常碰到的推荐人(Referrer)信息. ...
- modelviewset settings 配置
# 过滤器 # 1,安装 django-filter # 2,注册应用 # 3,配置settings, 在view里配置可过滤的字段 # 4,使用 查询字符串携带过滤信息 REST_FRAMEWORK ...
- Python-运算符和其优先级
运算符 算数运算符 + - * ** / // % print(4 + 5) print("a" + "b") print([1, 2] + [1, 4]) p ...
- Go 数组&切片
数组相关 在Go语言中,数组是一种容器相关的数据类型,用于存放多种相同类型的数据. 数组定义 在定义数组时,必须定义数组的类型以及长度,数组一经定义不可进行改变. 同时,数组的长度是按照元素个数进行统 ...
- java安全编码指南之:死锁dead lock
目录 简介 不同的加锁顺序 使用private类变量 使用相同的Order 释放掉已占有的锁 简介 java中为了保证共享数据的安全性,我们引入了锁的机制.有了锁就有可能产生死锁. 死锁的原因就是多个 ...
- 【字符串算法】AC自动机
国庆后面两天划水,甚至想接着发出咕咕咕的叫声.咳咳咳,这些都不重要!最近学习了一下AC自动机,发现其实远没有想象中的那么难. AC自动机的来历 我知道,很多人在第一次看到这个东西的时侯是非常兴奋的.( ...