目录
写在前面
在学习zk之前,我们需要知道为什么要学习zk,为什么不是zx,zy,zz,目前在我们所接触的系统中偏多的还是分布式系统,那么问题来了,在分布式系统以及多节点部署的时候,会出现很多并发的问题(分布式协调问题),而zk就可以很好的解决。
数据结构
zk类似于unix中的文件系统,呈现一棵树的形状,下面会挂载很多的节点,每个节点的结构都是一个Znode,
记录了当前节点的
事务id(zxid)
创建时间(ctime)
更改时间(ctime)
数据版本(dataVersion)
acl版本(aclVersion)
数据长度(dataLength)
孩子节点数量(numChildren) 等等
[zk: localhost:2181(CONNECTED) 35] get /zhucc
value
cZxid = 0xd
ctime = Thu Aug 22 05:31:44 PDT 2019
mZxid = 0xd
mtime = Thu Aug 22 05:31:44 PDT 2019
pZxid = 0xd
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x16cb93f57920002
dataLength = 5
numChildren = 0
节点类型
1:持久节点:
数据不会随着客户端和服务器的断开而消失
create /zhucc value
2:持久顺序节点:
和持久节点有着共同的属性, 另外对于一个同名字的节点,是可以创建多个的,会在value后面给你添加自增的一串数字
create - s /zhucc value
3:临时节点:
随着客户端和服务器端的断开连接(session)而失效
create -e /zhucc value
4:临时顺序节点:
随着客户端和服务器端的断开连接(session)而失效,另外可以创建多个,会在value后面给你添加自增的一串数字
create -e -s /zhucc value
ACL机制
在zk中,都是以Znode为单位的,对于这些Znode,zk是提供了权限机制的
1:节点的访问控制
对于有的用户来说,没有相对应Znode权限的,是没法对节点进行操作的
2:命令设置:
1:getAcl
获取某个节点的acl getAcl /zhucc/age
2:setAlc
setAcl /zhucc/name auth:root:123456 crwda
3:addauth
3:命令结构组成
scheme: id: permission
1:scheme
1:world: 默认,公开
2:auth 用户认证的
3:digest 通过密码认证的(一般是加密) BASE64(SHA1(password))
4:ip 通过id的方式进行过滤,一般不使用,因为在防火墙就已经做过限制了
2:id 验证模式和scheme 保持 一一匹配
1:auth: username:password
2:digest :username:BASE64(SHA1(password))
3:ip: 客户端ip
4:world:anyone
3:permission
1:CREATE c
2:READ r
3:WRITE w
4:DELETE d
5:ADMIN a