`

zookeeper学习笔记-基本用法进阶

zk 
阅读更多
数据节点
数据节点Znode:
– 是机器的意思
– zk树形结构中的数据节点,用于存储数据
– 持久节点(PERSISTENT)一旦创建,除非主动调用删除操作,否则一直存储在zk上
– 临时节点(EPHEMERAL):与客户端的会话绑定,一旦客户端会话失效,与个客户端创建的所有临时节点都会被移除
– PERSISTENT _SEQUENTIAL 创建子节点时,如果不置属性SEQUENTIAL,则会自动在节点名称后面面追加一个整型数字,上限是整形的最大值

创建顺序节点1,节点数据为test1
创建顺序节点2,节点数据内容为test2
查看所有创建的顺序子节点
创建顺序节点,带前缀




zk-watcher
问题
– 集群中有多个机器,当某个通用的配置发生变化后,怎么让所有服务器的配置都统一生效?
– 当某个集群节点宕机,其它节点怎么知道?

Watcher组成
– 客户端
– 客户端watchManager
– zk服务器
Watcher机制
– 客户端向zk服务器注册watcher的同时时,会将watcher对象存储在
客户端的watchManager
– Zk服务器触发watcher事件后,会
向客户端发送通知,客户端线程从
watchManager中调起watcher执行

Watcher接口
– public class ZLock implements Watcher
– public void process(WatchedEvent event)
Watcher事件
– 通知状态:org.apache.zookeeper.Watcher.Event.KeeperState
– 事件类型:org.apache.zookeeper.Watcher.Event.EventType

NodeDataChanged事件
– 无论节点数据发生变化还是数据版本发生变化都会触发
– 即使被更新数据更新数据一样,数据版本都会发生变化
NodeChildrenChanged
– 新增节点或者删除节点
AuthFailed
– 重点不是客户端会话没有权限而是授权失败(后面详细讲)
创建zk客户端对象实例时注册
– ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
– ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly)
– ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd)
– ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolean
canBeReadOnly)
通过这种方式注册的watcher将会作为整个zk会话期间的默认watcher,会一直被
保存在客户端ZKWatchManager的defaultWatcher中,如果有其它的配置置,则这个
watcher会被覆盖
其它注册api
– getChildren(String path, Watcher watcher)
– getChildren(String path, boolean watch)
• Boolean watch表示是否使用上下文中默认的watcher,即创建zk实例时设置的watcher
– getData(String path, boolean watch, Stat stat)
• Boolean watch表示是否使用上下文中默认的watcher,即创建zk实例时设置的watcher
– getData(String path, Watcher watcher, AsyncCallback.DataCallback cb, Object ctx)
– exists(String path, boolean watch)
• Boolean watch表示是否使用上下文中默认的watcher,即创建zk实例时设置的watcher
– exists(String path, Watcher watcher)

客户端只能收到相关事件通知,但是并不能获取到对应数据节点的原始数据内容以
及变更更的新数据内容;因次,如果业务需要知道变更前的数据或者变更后的新数据,
需要业保存变更前的数据和调用接口获取新的数据

针对子节点的删除增加会触发事件,注册一次只能触发一次(非常重要),触发一次就会失效

判断调用是否需要注册watcher


如果需要注册,则传入对象cnxn
ServerCnxn类及cnxn对象
– Zk客户端与服务器之间的tcp连接
– 实现了watcher接口
– 总结:即包含了连接信息又包含watcher信息
watchManager
– Zk服务器端Watcher的管理者
– 从两个维度维护watcher
• watchTable:从数据节点的粒度来维护
• watch2Paths从watcher的粒度来维护
– 负责watcher事件的触发

Watcher触发
– DataTree类
• 维护节点目录树的数据结构

客户端回调watcher步骤
– 反序列化,将字节流转换成WatcherEvent对象
– 处理chrootPath
– 原watchedEvent:把WatcherEvent对象转换成WatchedEvent
– 回调Watcher:把WatchedEvent对象交给EventThread线程
EventThread
– 从客户端的ZKWatchManager中取出Watcher,并放入waitingEvents队列中


Acl组成
– Scheme:id:permission 比如:world:anyone:crdwa
– Scheme:验证过程中使用的检验策略
– Id:权限被赋予的对象,比如ip或者某个用户
– Permission:权限,上面的crdwa,表示五个权限组合
– 通过setAcl命令设置节点的权限
– 节点的acl不具有继承关系
– getAcl可以查看节点的Acl信息

Scheme类型--world
– Scheme:id:permission
– Id:固定值:anyone,表示任何用户
– world:anyone:crdwa表示任何用户都具有crdwa权限


Scheme类型---auth
– Scheme:id:permission ,比如: auth:username:password:crdwa
– 表示给认证通过的所有用户设置acl权限
– 时可以添加多个用户
– 通过addauth命令进行认证用户的添
• addauth digest <username>:<password>
– Auth策略的本质就是digest
– 如果通过addauth创建多组用户和密码,当使用setAcl修改权限时,所有的用户和密码的权限都会跟
着修改
– 通过addauth新创建的用户和密码组需要重新调用setAcl才会加入到权限组中去

Scheme类型---auth

Scheme类型---digest
– Scheme:id:permission ,比如:digest:username:password:crdwa
– 指定某个用户及它的密码可以访问
– 处的username:password必须经过SHA-1和BASE64编码
• BASE64(SHA1(username:password))
– 通过addauth命令进行认证用户的添加
• addauth digest <username>:<password>
Scheme类型---digest

Scheme类型---IP
– Scheme:id:permission ,比如: ip:127.0.0.1:crdwa
– 指定某个ip地址可以访问


Scheme类型---super

客户端通过super级别的用户admin授权
即可以访问任何节点


0
3
分享到:
评论

相关推荐

    java学习笔记.zip

    这些"java学习笔记.zip"包含的文件详细涵盖了Java的多个重要方面,包括基础、进阶以及与之相关的框架技术。以下是对每个文件内容的概览: 1. **10、JavaSE:IO流.pdf** Java标准版(JavaSE)中的输入/输出(IO)流...

    Java后端学习笔记代码Java后端学习笔记代码

    本压缩包"Java后端学习笔记代码"显然是一个针对Java后端开发的学习资源集合,包含了作者在学习过程中编写的代码示例和笔记。以下是基于这个主题的详细知识点解析: 1. **Java基础**: 作为Java后端开发的起点,掌握...

    狂神说java系列笔记(java基础+javaweb+ssm+微服务)全套

    :这套笔记以“狂神说”为特色,提供了详细的讲解和实例,让学习者能够从Java基础开始,逐步进阶到Java Web开发,再深入到Spring、MyBatis等主流框架的应用,最后涉及微服务技术,如Spring Boot和Dubbo的使用。...

    狂神说java系列笔记(java基础+javaweb+ssm+微服务).rar

    【狂神说java系列笔记】是一份全面涵盖Java学习路径的综合资料,从基础到进阶,再到现代企业级开发的必备技术。这份资源旨在帮助Java开发者深入理解语言特性和应用实践,提升技能水平。 首先,从【Java基础】部分...

    hadoop视频教程珍藏版

    这部分将详细介绍这些工具的使用方法和最佳实践。 最后,企业实战教程将理论知识与实际项目结合,提供真实的企业级案例,帮助学习者理解Hadoop在实际业务中的应用。这可能包括数据仓库构建、实时流处理、机器学习...

    JAVA+spingcloud+linux教学笔记

    Linux是广泛使用的服务器操作系统,学习Linux命令行操作(如ls、cd、mkdir、cp、mv、rm等)、文件系统、用户与权限管理、进程管理、网络配置、服务管理(如Apache、Nginx、MySQL等)以及Shell脚本编写是运维和开发者...

    java版飞机大战源码-Coding-Now:立即编码

    见toc.py,(python2.7,使用方法·:python toc.py MDFile,会生成一个.bak备份文件)【推荐这个可以用,也不用装其他工具】 git团队协作项目操作说明.md Linux系统下开发环境搭建 含有如何在Deepin Linu

Global site tag (gtag.js) - Google Analytics