Loading

Zookeeper存储结构及基础使用

储存结构

  • zookeeper是一个树状结构,维护一个小型的数据节点znode
  • 数据以key-value的方式存在,目录是数据的key
  • 所有的数据访问都必须以绝对路径的方式呈现

一个znode的格式[1]

img

首先查看下我们的'/根'目录下的情况,

我们的根目录下有zookeeper、sxt、bdp三个节点。而bdp下还要一个001节点。

查看下bdp此节点的属性。

现在,我们对/bdp节点进行一次修改。

image-20211101144944452

可以看到,mZxid和mtime都发生了改变。

然后,我们在bdp下,再新增一子节点,

可见 bdp 节点的 pZxid、cversion、numChildren 都发生了相应的改变。

节点的分类

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

    • 默认创建的就是持久化节点
    • 客户端与zookeeper断开连接后,该节点依旧存在。
  2. PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

    • 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
  3. EPHEMERAL-临时目录节点

    • 客户端与zookeeper断开连接后,该节点被删除
    • 可以被所有客户端查看
  4. EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

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

    • 使用create -s /znode value 进行创建
    • 就是给该节点名称进行顺序编号,不会重复

zookeeper操作命令

  1. 启动zookeeper

    zkServer.sh start

  2. 登录到zookeeper

    zkCli.sh -server 127.0.0.1:2181

    zookeeper是一个集群,默认登录到了本地,(127.0.0.1),2181是zookeeper客户端端口。

  3. 查看某个目录下的子节点

    ls /path

  4. 查看某个目录下子节点的详细信息

    ls2 /path

  1. 新建节点:
    create /bdp "hello"

  2. 查看节点信息:

    get /bdp

  3. 修改节点值

    set /bdp "hey"

    最多1M

  4. 删除节点

    delete /bdp/001

当然也可以使用,rmr /node强行删除。

  1. 退出客户端

    quit

zkServer的监听机制

  • 官方说明
    • 一个Watch时间是一个一次性的触发器,当被设置了watch的数据发生改变的时候,则服务器将这个改变发送给设置Watch的客户端,以便通知它们。
  • 监听机制特点
    • 一次性触发数据改变时,一个watch event会被送到client,但是client只会收到一次这样的信息。
    • watcher event异步发送。
  • 数据监视
    • zookeeper有数据监视和子数据监视
    • getdata()和exists()设置数据监视
    • getchildren()设置子节点监视
  • 数据监听只会监听被设置watch,不会监听其子节点的任何变化

监听实现

  1. get /node watch

对/bdp的子节点进行操作时,watch都没有反应,只有对/bdp进行操作时,发生watchedEnvent。

  1. stat /node watch

我试着新增和删除node的子节点,不会发生watchedEnvent。删除node时发生了。

  1. ls /node watch

对其子节点进行监控,新增或删除子节点时,都会发生watchedenvent

ACL权限控制(了解)

  • ACL:Access Control List 访问控制列表

权限设置

概述

  • ACL 权限设置的格式时是scheme: id:permission三段式:

    • 授权方式:scheme

    • 授权对象:id

    • 授予的权限:permission

  • 特性如下:

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

    例如:

    setAcl /test2 ip:128.0.0.1:crwda

    将/test2的crwad权限授予ip地址为128.0.0.1的用户

SCHEME 采用何种方式授权

  • world:全局权限授予
  • auth:代表已经认证通过的用户
  • digest:用户名-密码认证方式,这也是业务系统中最常用的。
  • ip:使用客户端的主机ip来进行授权

ID

  • 权限模式 授权对象
    IP 通常是一个IP地址,例如'192.168.3.2'
    Digest 自定义,通常是“username:password(username:用户名,password,密码)”,例如"CCC:12311414141414124124124"
    World 只有一个id:anyone
    Auth 与Digest一致

permission 授予什么权限

  • ZK的节点有五种操作权限:CREATE(增)、DELETE(删)、READ(查)、WRITE(改)、ADMIN(管理员权限)
  • 五种权限中,delete是指对子节点的删除权限,而其他四种权限是对自身节点的操作权限
  • CREATE:创建子节点
  • DELETE:删除子节点
  • READ:读取节点数据及显示子节点列表
  • WRITE:可以设置节点数据
  • ADMIN:可以设置 节点访问控制列表权限

ACL相关命令[2]

  • getAcl path : 读取ACL权限配置
    • getAcl /
  • setAcl setAcl path acl : 设置ACL权限
    • setAcl / world:anyone:wa
    • setAcl / auth:zhang:123456:rcwda
  • addauth scheme auth : 添加认证用户
    • addauth digest zhang:123456

四字命令(了解)

安装nc

  • yum install nc -y

使用方式

  • 在终端输入

    echo 四字命令 | nc ip/node1 2181
    

可以看到BaseNode的集群配置情况。

  • 如果四字命令不可使用,那么在/zookeeper/conf/zoo.cfg文件最后加上

    4lw.commands.whitelist=*
    

    即可

四字命令

Zookeeper四字命令 功能描述
conf 打印出服务相关配置信息
cons 列出所有链接到这台服务器的客户端全部连接/绘画详细信息.包括"接受/发送"的包数量,会话id,操作延迟,最后的操作执行等信息
crst 重置所有连接的连接和会话统计信息
dump 列出那些比较重要的会话和临时节点
envi 打印出服务环境的详细信息。
reqs 列出未经处理的请求
ruok 测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应。
stat 输出关于性能和连接的客户端的列表。
srst 重置服务器的统计。
srvr 列出连接服务器的详细信息
wchs 列出服务器watch的详细信息。
wchc 通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表。
wchp 通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。
mntr 输出可用于检测集群健康状态的变量列表

Zookeeper环境搭建(增加一台虚拟机)

  1. 解压zookeeper

  2. 修改zookeeper/conf zoo.cfg

  3. echo 5 > /var/bdp/zookeeper/myid

  4. vi /etc/hosts

  5. vi /etc/profile

  6. zkServer.sh restart/start

也可以不重启添加zookeeper(热部署)

参考

​ [1]. ZooKeeper 数据模型 znode 结构详解 - Mr.peter - 博客园 (cnblogs.com)

​ [2]. zookeeper的ACL权限控制 - QiaoZhi - 博客园 (cnblogs.com)[zookeeper的ACL权限控制 - QiaoZhi - 博客园 (cnblogs.com)](

posted @ 2021-11-01 19:42  heybazinga  阅读(455)  评论(0编辑  收藏  举报