Zookeeper之功能篇章

一、集群角色

Leader:

  • 事物请求的唯一调度和处理者,保证集群事物处理的顺序性
  • 集群内部各服务器的调度者

Follower:

  • 处理客户端非事物请求、转发事物请求给leader服务器
  • 参与事物请求 Proposal 的投票(需要半数以上服务器 通过才能通知leader commit数据; Leader发起的提案, 要求Follower投票)
  • 参与Leader选举的投票

Observer:是 zookeeper3.3 开始引入的一个全新的服务器角色。

  • 观察zookeeper集群中的最新状态变化并将这些状态变化 同步到 observer 服务器上。Observer 的工作原理与 follower 角色基本一致,
  • 只提供非事物请求服务,没有选举和投票的资格,通常在于不影响集群事物 处理能力的前提下提升集群非事物处理的能力 (例:选举时)

二、数据模型

Zookeeper 的视图结构和标准的文件系统非常类似,每一个节点称之为ZNode,是Zookeeper的最小单元。每个Znode 上都可以保存数据以及挂载子节点。构成一个层次化的树形结构。

1、持久节点(PERSISTENT)

创建后会一直存在 zookeeper 服务器上,直到主动删除

2、持久有序节点(PERSISTENT_SEQUENTIAL)

每个节点都会为它的一级子节点维护一个顺序

3、临时节点(EPHEMERAL)

临时的生命周期和客户端的回话绑定在一起,当客户端回话失效该节点自动清理

4、临时有序节点(EPHEMERAL)

在临时节点的基础上多了一个顺序性

三、会话

在这里插入图123片描述

  • Client 初始化连接,状态转化为 CONNECTING ①
  • Client 与 Server 成功建立连接,状态转为 CONNECTED ②
  • Client 丢失了与 Server 的连接或者没有接受到 Server 的响应, 状态转为 CONNECTING ③
  • Client 连上另外的 Server 或连接上了之前的 Server , 状态转为 CONNECTED ②
  • 若会话过期(是Server 负责生命会话过期,而不是Client),状态转化为CLOSED ⑤
  • Client 也可以主动关闭回话 ④ ,状态转化为 CLOSED

四、Stat状态信息

每个节点除了存储数据内容以外,还存储了数据节点本身的一些状态信息,通过 get 命令可以获得状态信息的详细内容

状态属性说明
cZxid0x0即Created ZXID,表示该数据节点被创建时的事务ID
ctimeWed Dec 31 19:00:00 EST 1969即Created Time,表示节点被创建的时间
mZxid0x0即Modified ZXID,表示该数据节点被更新时的事务ID
mtimeWed Dec 31 19:00:00 EST 1969即Modified Time,表示该节点最后一次被更新的时间
pZxid0x0表示该节点的子节点列表最后一次被修改时的事务ID。注意。只有子节点列表变更了才会更新这个事务ID,子节点的内容变更不会影响pZxid
cversion1当前数据节点子节点的版本号,规则同上
dateVersion0当前数据节点数据内容的版本号
aclVersion0当前数据节点 ACL 变更版本号
ephemeralOwner0x0创建该临时节点的会话的SessionID,如果该节点是持久节点,那么这个属性值为0 (0x0)
dateLength0数据value的长度
numChildren1当前节点的子节点个数

五、版本

保证分布式数据原子性,Zookeeper 为数据节点引入了版本的概念,每个数据节点都有三类版本信息,对数据节点任何更新操作都会引起版本号的变化;cversion、dateVersion、aclVersion

版本的概念,和我们经常使用的乐观锁类似, version水泥杆就是用来实现乐观锁机制的“写入效验” 。

六、Watcher

Zookeeper 提供了分布式数据的发布 / 订阅功能,Zookeeper 允许客户端向服务端注册一个 watcher 监听, 当服务端的一些指定事件触发了 watcher ,那么服务端就会想客户端发送一个事件通知。

值得注意的是,Watcher 通知是一次性的,即一旦触发一次通知后,该Watcher 就失效了,因此客户端需要反复注册 Watcher ,即程序中在 process 里面又注册了Watcher ,否则,将无法获取xx节点的创建而导致子节点变化的事件。

七、ACL

znode 不仅包含了存储的数据,还有ACL(Access Control List)。znode 的创建时,可以给它设置一个ACL,来决定谁可以对znode 做哪些操作。

使用率较少,因为zookeeper一般都部署在内网。

ACL 是由鉴权方式(Schemes)、鉴权方式的ID(ID也是值) 和一个许可(permissions)的集合组成。

例如:我们想通过一个ip地址为10.0.0.1的客户端访问一个znode。那么我们需要为znode 设置一个ACL,鉴权方式使用IP鉴权方式,鉴权方式的ID为10.0.0.1,只允许读权限,那么ACL的格式就是:

ip:10.0.0.1:w

1、特点
  • Zookeeper 的权限控制是基于每个znode节点的,需要对每个节点设置权限;
  • 每个 znode 支持设置多种权限控制方案和多个权限;
  • 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点;
  • 所以任何一个客户端都可以通过exists 操作来获得任何znode 的状态,从而得知znode 是否真的存在。
2、ACL Permissions
ACL权限ACL简写允许的操作
CREATEc创建子节点
READr获取节点的数据和他的子节点
WRITEw设置节点的数据
DELETEd删除子节点(仅下一级节点)
ADMINa设置ACL权限
3、ACL Schemes 、ID

Zookeeper 内置了一些权限控制方案,可以用以下方案为每个节点设置权限

方案(schema)id描述
worldanyone只有一个用户:anyone,代表所有人,默认
ip10.0.0.1使用ip地址认证
authadmin使用已添加认证的用户认证
digestadmin:admin使用 “用户:密码” 方式认证
4、权限相关命令
命令语法描述
getAclget Acl path读取ACL权限
setAclsetAcl path acl设置ACL权限
addauthaddauth scheme auth添加认证用户
createcreate [-s][-e] path data acl创建节点时指明ACL权限
5、zkCli操作示例

权限变动stat的aclVersion也会跟着递增

a、word
# 语法:
setAcl <path> world:anyone:<acl> # 默认情况下时 world 方法,任何人有所有权限:
# 示例:
getAcl /cndba
setAcl /cndba world:anyone:cdr
b、ip
# 语法:
setAcl <path> ip:<ip>:<acl>
# <ip>:可以是具体IP或者IP/bit格式,即IP转换为二进制,匹配前bit位,
# 如192.168.0.0/16匹配192.168.*.*
# 示例:
create /acl test
setAcl /acl ip:192.168.56.102:cdrwa
getAcl /acl
# 结果:
其他ip电脑访问该节点就:Authentication is not valid : /acl
c、auth

如果测试断开的话,就不能访问,必须重新addauth 添加认证用户才可以

当然在创建znode时也可以直接指定ACL,但断开之后同样需要添加认证用户才可以获取数据

# 语法:
addauth digest <user>:<password> #添加认证用户
setAcl <path> auth:<user>:<acl>
# 示例:
addauth digest dave:dave
setAcl /acl auth:dave:cdrwa
getAcl /acl
get /acl
# 断开访问示例:
get /acl  # Authentication is not valid : /acl
addauth digest dave:dave
get /acl
d、digest

同auth一样,如果断开了,可以通过addauth 重新获得权限

下面的密码是经过SHA1及BASE64处理后的密文,在Shell中可以用一下命令计算:

格式:echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64
自己加密
[root@Master ~]# echo -n admin:admin | openssl dgst -binary -sha1 | openssl base64
x1nq8J5GOJVPY6zgzhtTtA9izLc=
# 语法:
setAcl <path> digest:<user>:<password>:<acl>
# 示例:
create /ustc ustc
setAcl /ustc digest:admin:x1nq8J5GOJVPY6zgzhtTtA9izLc=:cdrwa
getAcl /ustc
get /ustc # Authentication is not valid : /ustc
addauth digest admin:admin
get /ustc

八、quota

Zookeeper quota 机制支持节点个数(namespace)和空间大小(bytes)的设置。Zookeeper quota 保存在/zookeeper/quota 节点下,可以设置该节点的全年,以防其他人修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值