0
点赞
收藏
分享

微信扫一扫

Zookeeper学习笔记(一)——Zookeeper的基本功能

夏天的枫_ 2022-04-06 阅读 126

一、简介

Zookeeper是雅虎公司基于chubby的思想,开发的一个分布式协调组件,后来捐献给Apache公司。它主要用来解决分布式数据一致性问题。分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、配置管理、分布式锁和分布式队列等功能。

二、Zookeeper 安装配置

linux环境下
下载地址:zookeeper 下载地址为: https://zookeeper.apache.org/releases.html。选择一个稳定版本下载。
在这里插入图片描述
官网说明了3.8.0是当前版本,3.7.0是最新的稳定版本,我们下载3.7.0就可以了。
将下载下来的tar包拷贝到linux服务器上。然后进入的tar包所在目录,打开终端。

$ tar -zxvf zookeeper-3.7.0.tar.gz
$ cd zookeeper-3.4.14
$ cd conf/
$ cp zoo_sample.cfg zoo.cfg
$ cd ..
$ cd bin/
$ sh zkServer.sh start  

到这里,Zookeeper就配置好启动了,如下所示:
在这里插入图片描述
查看服务状态(单机节点):
在这里插入图片描述
启动客户端:

$ sh zkCli.sh

客户端启动后就会进入客户端的操作界面
在这里插入图片描述
在客户端使用help命令,查看客户端的所有命令
在这里插入图片描述

启动完客户端,就可以对Zookeeper服务进行操作了。

windows环境下
下载同上。
下载后解压,将 conf 目录下的 zoo_sample.cfg 文件,复制一份,重命名为 zoo.cfg。然后在安装目录下面新建一个空的 data 文件夹和 log 文件夹。修改 zoo.cfg 配置文件,将 dataDir=/tmp/zookeeper 修改成 zookeeper 安装目录所在的 data 文件夹。注意目录不要使用反斜杠(3.7.0版本使用反斜杠会导致目录识别错误)。
在这里插入图片描述

运行zkServer.cmd启动Zookeeper服务
在这里插入图片描述
运行zkCli.cmd启动客户端
在这里插入图片描述

三、Zookeeper数据模型znode

1、znode结构和属性

在Zookeeper中,提供了znode的数据模型来实现功能。可以说 zookeeper 中的所有存储的数据是由 znode 组成的,并以 key/value 形式存储数据。整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头,zookeeper 名称空间中的每个节点都是由一个路径标识。结构如下所示。
在这里插入图片描述
每个节点都有自己的属性,使用get -s 节点全路径或者stat 节点全路径命令可以得到节点的信息。第一行是这个节点的value。
在这里插入图片描述

属性名称属性含义
cZxid该节点被创建时的事务ID
ctime该节点被创建时的时间
mZxid该节点最后一次被更新时的事务ID
mtime该节点最后一次被更新时的时间
pZxid该节点的子节点列表最后一次更新时的事务ID,注意只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid
cversion该节点的子节点版本号,子节点每次更新版本号加1(和pZxid一样,子节点内容不影响)
dataversion该节点的数据(value)版本号,数据每次修改该版本号加1
aclversion该节点的权限版本号,权限每次修改该版本号加1
ephemeralOwner创建该临时节点的会话的sessionID。(如果该节点是持久节点,那么这个属性值为0)
dataLength该节点的数据长度
numChildren该节点拥有子节点的数量(只统计直接子节点的数量)

2、znode类型

持久节点(Persistent Nodes)
创建后会一直存在 zookeeper 服务器上,直到主动删除的节点。

create 节点路径 value值

临时节点(Ephemeral Nodes)
临时节点的生命周期和客户端的会话(session)绑定在一起,当客户端会话失效该节点自动清除。临时节点不允许有子节点。使用getEphemerals 节点路径命令可以获得指定路径下的临时节点列表,不加路径则会列出所有临时节点。

//创建临时节点
create -e 节点路径 value值

有序节点(Sequence Nodes)
每个节点都会为它的一级子节点维护一个计数器。这个计数器对于父 znode 是唯一的,计数器的格式为 %010d - 即 10 位数字和 0(零)填充。示例:

//创建的就是node_1下的子节点,节点名称形式:0000000001,值是value
create -s /node/node_1/ value
//创建的就是node下的子节点,节点名称形式就是node_10000000001,值是value
create -s /node/node_1 value

计数器由有符号整数(4 字节)存储,所以超过 2147483647 时,计数器将溢出(导致”-2147483648"出现)。

容器节点(Container Nodes)
当子节点都被删除后,容器节点也随即删除

create -c 节点路径 value值

TTL 节点
可以给持久节点或者持久有序节点设置一个 TTL(以毫秒为单位)。如果节点在 TTL 内没有被修改并且没有子节点,则会被删除。此功能默认是关闭的,需要在配置文件中设置extendedTypesEnabled=true,开启。如果没开启就设置TTL,则Zookeeper服务器将抛出 KeeperException.UnimplementedException。

create -t 1000 节点路径 value值

3、znode特性

1、同一级节点 key 名称是唯一的。
2、创建节点时,必须要带上全路径
3、session 关闭,临时节点清除
4、watch 机制,监听节点变化
5、delete 命令只能一层一层删除,可以使用deleteall 命令递归删除

四、Zookeeper权限控制ACL

Zookeeper使用ACL来控制对znode的访问。ACL实现与UNIX文件访问权限非常相似:它使用权限位来允许/禁止针对节点的各种操作以及这些位适用的范围。与标准 UNIX 权限不同,ZooKeeper 节点不受用户(文件所有者)、组和world(其他)三个标准范围的限制。ZooKeeper 没有 znode 所有者的概念。相反,ACL 指定一组 id 和与这些 id 关联的权限。

ACL命令
getAcl 命令:获取某个节点的 acl 权限信息。
setAcl 命令:设置某个节点的 acl 权限信息。
addauth 命令:输入认证授权信息,注册时输入明文密码,加密形式保存。

Zookeeper 的ACL通过 [scheme🆔permissions] 来构成权限列表。
permissions:权限类型
CREATE:您可以创建一个子节点
READ:您可以从节点获取数据并列出其子节点。
WRITE:您可以为节点设置数据
DELETE:您可以删除一个子节点
ADMIN:您可以设置权限

scheme:权限方案
world:默认权限,只有一个id为“anyone”。

$ create /aclnodes
$ getAcl /aclnodes
//设置world方案,id为anyone,权限为cdrwa
$ setAcl /aclnodes world:anyone:cdrwa
$ getAcl /aclnodes

auth :是用户创建 znode,然后将对该 znode 的访问限制为仅该用户

//auth:user:pwd:cdrwa
//需要使用addauth先创建用户和密码
$ addauth digest user1:123456
//auth方案,id为user1:123456,权限为cdrwa
$ setAcl /aclnodes auth:user1:123456:cdrwa
$ getAcl /aclnodes

digest:
重新打开客户端

//digest:user:BASE64(SHA1(PWD)):cdrwa
//HYGa7IZRm2PUBFiFFu8xY2pPP/s=是加密后的字符串。可以使用getAcl查看加密后的字符串
$ getAcl /aclnodes
$ setAcl /aclnodes  digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:cdrwa
$ getAcl /aclnodes
//需要添加用户到当前客户端,才能操作加了此用户的ACL
$ addauth digest user1:123456
$ getAcl /aclnodes

IP:
使用客户端主机 IP 作为 ACL ID 身份

$ create /ipnode
$ getAcl /ipnode
$ setAcl /ipnode ip:127.0.0.1:cdrwa
$ getAcl /ipnode

还可以直接在创建节点时加上acl

$ create /aclnode1 world:anyone:cdrwa

五、Zookeeper watcher事件

Watcher 监听机制是 Zookeeper 中非常重要的特性。我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听事件,比如可以监听节点数据变更、节点删除、子节点状态变更等
事件,通过这个事件机制,可以基于 zookeeper 实现分布式锁、集群管理等功能。

在客户端命令行中,我们可以使用带有-w参数的命令,设置一个watch监听。
stat path -w :监听节点属性变化
ls path -w:监听子节点列表的变化
get path -w:监听节点的数据变化
示例:

$ create /watchnode
$ get /watchnode -w

当值变化后,就会触发监听:
在这里插入图片描述
watch监听只会触发一次,如果要实现永久监听,可以通过循环注册来实现。

六、客户端命令

在客户端输入help命令可以查看所有命令。
在这里插入图片描述
常用命令:

命令作用
ls [-s] [-w] [-R] path查看节点下的子节点列表 。-s展示属性信息,-w加上监听,-R展示此节点及所有子节点的路径信息
get [-s] [-w] path用于获取节点数据和状态信息,-s 展示属性信息,-w 加上监听
stat [-w] path查看节点属性信息。-w加上监听
create [-s] [-e] [-c] [-t ttl] path [data] [acl]创建节点。-s 有序节点,-e 临时节点, -c 容器节点, -t ttl TTl节点,ttl表示超时时间(ms),acl ACL权限,data 节点数据
set [-s] [-v version] path data设置节点的值。-s 设置完显示属性信息,-v version 版本号,只有version=当前版本号,才能设置成功。
delete [-v version] path删除节点,没有子节点时才能删除 -v version 版本号,
举报

相关推荐

0 条评论