zoukankan      html  css  js  c++  java
  • 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 权限示例:

    1. setAcl <path> digest :<用户名>:<密钥>:<权限位>
    2. addauth digest <用户名>:<密码>

    1:密钥 通过sha1与base64组合加密码生成,可通过以下命令生成

    echo -n <用户名>:<密码> | openssl dgst -binary -sha1 | openssl base64

    2:为节点设置digest 权限后,访问前必须执行addauth,当前会话才可以防问。

    ACL的特殊说明:

    权限仅对当前节点有效,不会让子节点继承。如限制了IP防问A节点,但不妨碍该IP防问A的子节点

  • 相关阅读:
    vue实战使用ajax请求后台数据(小白)
    jQuery实现tab栏切换效果
    jQuery下的ajax实例
    数据库之视图更新
    SQL Server 全文索引创建
    SQL Server 分区表
    数据快照 (Database Snapshot)
    FileStream
    ODBC,OLEDB,ADO,ADO.net,JDBC 理解
    拖延症?贪玩?来试试"百万金币时间管理法"
  • 原文地址:https://www.cnblogs.com/nijunyang/p/13882237.html
Copyright © 2011-2022 走看看