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的子节点

  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/nijunyang/p/13882237.html
Copyright © 2011-2022 走看看