数据节点
数据节点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授权
即可以访问任何节点
分享到:
相关推荐
apache-zookeeper分布式框架,压缩包内容:(apache-zookeeper-3.7.1-bin.tar.gz、apache-zookeeper-3.7.1.tar.gz、apache-zookeeper-3.6.4-bin.tar.gz、apache-zookeeper-3.6.4.tar.gz、apache-zookeeper-3.5.10-...
《Zookeeper-3.4.5-cdh5.16.2:分布式协调服务的核心解析》 Apache ZooKeeper,一个高度可靠的分布式协调系统,是大数据生态中的...理解并掌握Zookeeper的工作原理和使用方法,对于大数据环境的管理和优化至关重要。
apache-zookeeper-3.5.10-bin 环境搭配 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,...
apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-...
《Zookeeper 3.4.5-CDH5.15.1 安装详解》 Zookeeper,作为Apache的一款开源分布式协调服务,...通过本文的介绍,希望能帮助你更深入地了解Zookeeper在CDH5.15.1环境中的作用,以及如何有效地使用和维护这一关键组件。
1. **Zookeeper基本概念** - **Znode**: Zookeeper中的数据存储单元,类似于文件系统中的文件或目录,具有路径、数据、权限和ACL(访问控制列表)等属性。 - **Watcher**: 事件监听机制,允许客户端注册对Znode的...
apache-zookeeper-3.6.3-bin.tar的压缩包,解压到本地即可使用,还有zk.sh的脚本以及zoo.cfg和xsync。ZooKeeper 是一个分布式协调服务 ,由 Apache 进行维护。ZooKeeper 可以视为一个高可用的文件系统。ZooKeeper ...
**Zookeeper的基本概念:** 1. **节点(ZNode)**:Zookeeper的数据存储是以树形结构的节点形式存在,每个节点称为ZNode,包含数据和元数据。 2. **ACL(Access Control Lists)**:Zookeeper提供了细粒度的权限控制...
1. **Zookeeper的基本概念**: - **Znode**:Zookeeper中的数据单元,类似于文件系统的节点,可以存储数据并有唯一的路径标识。 - **Watcher**:观察者机制,允许客户端注册监听Znode的变化,当Znode的状态改变时...
apache-zookeeper-3.7.1-bin.tar.gz 内容概要:通过带着读者手写简化版Spring框架,了解Spring核心原理。在手写Spring源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC, AOP、 Bean...
Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着分布式操作的进展,同时也提供了命名服务、配置管理、组服务、分布式同步和领导选举等功能。在Windows环境下安装...
apache-zookeeper-3.7.0-bin.tar.gz
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、...
4. **启动Zookeeper**:使用`zkServer.sh start`命令启动Zookeeper服务,`zkServer.sh status`检查状态,`zkServer.sh stop`关闭服务。 5. **集群模式配置**:如果要在多台机器上部署Zookeeper集群,需要在每台机器...
1. **独立模式(Standalone)**:单个Zookeeper Server运行,适用于测试和学习,不适合生产环境。 2. **集群模式(Cluster)**:多个Zookeeper Server组成集群,提供高可用性和容错性。 3. **镜像模式(Mirror)**...
Zookeeper是Apache Hadoop项目中的一个关键组件,主要用于分布式系统...通过"zookeeper-3.4.5-cdh5.10.0.tar.gz"这个工具包,我们可以方便地在CDH 5.10.0环境中部署和使用Zookeeper,从而提升整个Hadoop集群的稳定性。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、...
Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供了一个高度可用、高性能的框架,用于管理数据和配置信息,处理命名服务、分布式同步以及组服务等问题。ZooKeeper 的设计目标是简化分布式环境中的...
赠送jar包:twill-zookeeper-0.6.0-incubating....使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
同时,监控Zookeeper的日志和指标,如CPU、内存使用情况、网络I/O等,有助于及时发现并解决问题。 总结,Zookeeper在CDH 5.5.0中的作用不可忽视,它为整个大数据集群的稳定运行提供了坚实的基础。理解并熟练掌握...