znode的组成部分
data:保存数据
acl:权限
stat:当前节点的元数据
stat值说明XXX节点数据信息cZxid = 0x800000002 节点创建时的zxidctime = Thu May 09 03:41:15 CST 2019 节点创建的时间mZxid = 0x800000002 数据节点最终一次更新时的事务IDmtime = Thu May 09 03:41:15 CST 2019 节点最近⼀次更新的时间pZxid = 0x800000002 对应节点与⼦节点(或者⼦节点)的修改的事务ID,与孙⼦节点⽆关cversion = 0 ⼦节点数据更新次数dataVersion = 0 本节点数据更新次数aclVersion = 0 节点授权信息(ACL)的更新次数ephemeralOwner = 0x0 如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的sessionid. 如果该节点不是临时节点,ephemeralOwner值为0dataLength = 4 节点的数据⻓度numChildren = 0 ⼦节点的个数child:当前节点的子节点
权限控制acl
Zookeeper采用ACL(AccessControlLists) 策略来进行权限控制,类似与UNIX文件系统的权限控制
数据节点znode的操作包含以下5种权限:
- CREATE: 创建子节点
- READ: 读取节点的数据和列出子节点
- WRITE: 更新节点的数据
- DELETE: 删除子节点
- ADMIN: 设置节点ACL的权限
注意:这里的CREATE和DELETE的权限控制是针对子节点的权限控制
Zookeeper中znode的四种身份认证的方式:
- world: 默认方式. 所有的用户都可以无条件进行访问
- ip: 指定ip的用户可以进行访问
- auth: 已经进行认证的用户可以进行访问
- digest: 通过用户名username和密码password的认证方式进行访问
znode的六种类型
持久节点PERSISTENT : 一旦创建节点znode, 就会一直存在.即使Zookeeper宕机也不会消失,直到将该节点znode删除
- 客户端与Zookeeper断开连接后,这个节点还会存在.如果创建成功,就不会意外丢失,即使服务器全部重启还会存在
- 每个持久节点PERSISTENT中既可以包含数据,也可以包含子节点
临时节点EPHEMERAL : 临时节点znode的生命周期是与客户端会话session绑定的,会话消失则节点消失. 临时节点znode只能作为叶子节点,不能创建子节点(常用于实现注册中心)
- 客户端与Zookeeper断开连接后,这个节点就删除
- 临时节点EPHEMERAL在创建的客户端和服务器间的Session结束时自动删除,因为服务器重启会导致Session结束,此时临时节点EPHEMERAL也会自动删除
持久顺序节点PERSISTENT_SEQUENTIAL : 除了具备持久节点PERSISTENT的性质之外,节点znode的名称还具有顺序性
临时顺序节点EPHEMERAL_SEQUENTIAL : 除了具备临时节点EPHEMERAL的性质之外,节点znode的名称还具有顺序性
容器节点:Container容器节点,当容器中没有任何子节点,该容器节点就会被zk定期删除(60s)
TTL节点:可以指定节点的到期时间,到期后被zk定时删除
ZK的数据持久化
因为zk是运行在内存中,因此为了数据不丢失,需要进行持久化,zk中提供了两种持久化机制:事务日志和数据快照;zk通过两种形式的持久化,在恢复时先恢复快照文件的中的数据导内存中,在利用日志文件中的数据做增量恢复,这样恢复的速度更快
事务日志
zk把执行的命令以日志的形式保存在dataLogDir指定的路径中的二进制文件(如果没有指定dataLogDir,则按照dataDir指定的路径)
数据快照
zk会在一定的时间间隔内做一次内存数据的快照,吧该时刻的内存数据保存在快照中
版权归原作者 大大大大肉包 所有, 如有侵权,请联系我们删除。