• Zookeeper详细功能介绍


     一:节点类型(znode)

      1.持久节点,所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点。

      2.临时节点,和持久节点不同的是,临时节点的生命周期和客户端会话绑定,也就是说如果客户端会话失效,那么这个节点就会被自动清除掉(注意:这里提到的会话失效,而非连接断开,另外,在临时节点下面不能创建子节点)

      3.持久顺序节点,这类节点的基本特性和持久节点是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序,基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会自动为给定节点名加上一个数字后缀,作为新的节点名,这个数字后缀的范围是整型的最大值。

      4.临时顺序节点,类似临时节点和顺序节点。

    二:Stat

      Zookeeper命名空间的每个znode都有一个与之关联的stat结构,类似于Unix/Linux文件系统中文件的stat结构,znode的stat结构中的字段显示如下,各自的含义如下:

      1.cZxid:创建znode的事务ID

      2.mZxid:最后修改znode的事务ID

      3.pZxid:最后修改添加或删除子节点的事务ID

      4.ctime:表示从1970-01-01T00:00:00Z开始以毫秒为单位的znode创建时间。

      5.mtime:表示从1970-01-01T00:00:00Z开始以毫秒为单位的znode最近修改时间。

      6.dataVersion:表示对该znode的数据所做的更改次数。

      7.cversion:这表示对此znode的子节点进行的更改次数。

      8.aclversion:表示对znode的acl进行更改的次数。

      9.ephemeralOwner:如果znode是ephemeral类型节点,则这是znode所有者的sessionID,如果znode不是ephemeral节点,则该字段设置为零。

      10.dataLength:这个是znode数据字段长度。

      11.numChildren:这表示znode的子节点的数量。

    三:watch

      一个zk节点是可以被监控的,包括这个目录中存储的数据的修改,子节点目录的变化,一旦变化可以通知设置监控的客户端,这个功能是Zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等。

      watch机制官方说明:一个watch事件是一个一次性的触发器,当被设置了watch的数据发生了改变的时候,则服务器将这个改变发送给设置了watch的客户端,以便通知他们。

      可以注册watcher的方法:getData,exists,getChildren。

      可以触发watcher的方法:create,delete,setData.连接断开的情况下触发的watcher会丢失。

      一个watcher实例是一个回调函数,被回调一次后就被移除了,如果还需要关注数据的变化,需要再次注册watcher。

    四:常用命令

      1.创建节点:用给定的路径创建一个节点,flag参数指定创建的节点是临时的,持久的还是顺序的。默认情况下,所有节点都是持久的,当会话过期或客户端断开连接时,临时节点(flag:-e)将会被自动删除。顺序节点保证节点路径将是唯一的,Zookeeper集合将向节点路径填充10位序列号,例如,如果节点路径/myapp 将转换成/myapp000000001,下一个序列号将为/myapp0000000002.如果没有指定flag,节点默认为持久节点。

      创建持久节点

      语法:create /path data     

      示例:create /firstNode first

      创建顺序节点,请添加flag:-s

      语法:create -s  /path data  

      示例:create -s /firstNode second

      创建临时节点,请添加flag:-e

      语法:create -e  /path data  

      示例:create -e /firstNode ephemeral

      当客户端断开连接时,临时节点将会被删除。

      2.获取数据:它返回节点的关联数据和指定节点的元数据,

      语法:get /path

      示例:get  /firstNode

      要访问顺序节点,必须输出znode的完整路径:例如:get /firstNode00000000001

      3.设置数据:设置指定znode的数据。

      语法:set /path data 

      示例:set /firstNode first_update

      4.创建子节点:创建子节点类似于创建一个新的znode,唯一的区别是,子znode的路径也将具有父路径。

      语法:create /parent/path/subnode/path data

      示例:create /firstNode/children firstChildren

      5.列出子节点:此命令用于列出和显示znode的子项。

      语法:ls /path

      示例:ls /firstNode

      6检查状态:状态描述指定的znode的元数据,它包含时间戳,版本号,acl,数据长度和子znode等细项。

      语法:stat /path

      示例:stat /firstNode

      7.移除znode:移除指定的znode并递归其所有子节点。

      语法:rmr /path

      示例:rmr /firstNode

      删除(delete /path)类似于remove命令,但是只限定于没有子节点的znode

      8ACL:zk作为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这样不太安全,所以,zk通过ACL机制来解决访问权限的问题。

    •   Zookeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
    •   每个znode支持设置多种权限控制方案和多个权限
    •   子节点不会继承父节点的访问权限,客户端无权访问某个节点,但是可以访问他的子节点。

      ACL权限控制,使用 schema:id:permission来标识,主要涵盖三个方面:

    •   权限模式(schema):鉴权的策略
    •   授权对象(id)
    •   权限(permission)

      schema:

    •   world:只有一个用户:anyone,代表所有人(默认)
    •   ip:使用IP地址认证
    •   auth:使用已添加认证的用户认证
    •   digest:使用“用户名:密码”方式认证

      id:授权对象id是指,权限赋予的用户或者一个实体,例如:IP地址或者机器。授权模式schema与授权对象id之间关系:

    •   world:只有一个id即anyone
    •   ip:通常是一个IP地址或者地址段,比如192.168.0.110或者192.168.0.1/24
    •   auth:用户名
    •   digest:自定义加密方式

      权限:

      CREATE,简写为c,可以创建子节点

      DELETE,简写为d,可以删除子节点(仅下以及节点),注意不是本节点

      READ,简写为r,可以读取节点数据及显示子节点列表

      WRITE,简写为w,可设置节点数据

      ADMIN,简写为a,可以设置节点访问控制列表

      9.查看ACL

      命令:getAcl /parent

      默认创建的节点的权限是最开放的,所有都可以增删改查管理

      10.设置ACL:设置节点对所有人都有写和管理权限

      命令:setAcl /parent world:anyone:wa

      这个时候是无法读取这个节点的,需要新创建一个用户

      命令:addauth digest zhangsan:123456

      然后设置权限,这里设置只有zhangsan拥有这个节点的所有权限

      命令:setAcl /parent auth:zhangsan:12345:rdwca

    五:原生Zookeeper客户端存在的问题:

      客户端在连接服务端时会设置一个sessionTimeout(session过期时间),并且客户端会给服务端发送心跳以刷新服务端的session时间,当网络断开后,服务端无法接收到心跳,会进行session倒计时,判断是否超过了session过期时间,一旦超过了过期时间,就会发送session过期,这样就算后来网络通了,客户端从新连接上了服务端,就会接收到session过期的事件,从而删除临时节点和watcher等,原生客户端不会重新建session。

  • 相关阅读:
    毕业考试
    相机标定
    深度相机
    怎么选工业相机
    Python Socket 编程
    Canoe 过滤Trace中报文
    Canoe 使用Replay Block CAN回放报文
    安装Jupyter Notebook
    Altium Designer PCB 画板框
    EMQX 取消匿名登录和添加、删除用户
  • 原文地址:https://www.cnblogs.com/wk-missQ1/p/15077711.html
Copyright © 2020-2023  润新知