zookeeper笔记
来源:互联网 发布:网络机柜布线 编辑:程序博客网 时间:2024/05/16 17:23
一、定义
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。Zookeeper可以用来保证数据在ZK集群之间的数据的事务性一致。ZooKeeper是以Fast Paxos算法为基础的。
二、优点
1、最终一致性:最后为客户端展示同一个视图
2、可靠性:一台服务器节点故障了,客户端请求可以被其他服务器节点接受
3、实时性:zookeeper不能保证两个客户端同时得到最新的数据,如果需要最新数据,应该读数据之前调用sync()接口
4、独立性:各个客户端之间互不干预
5、原子性:所有的服务节点同时成功或失败
6、顺序性:leader接受处理请求是顺序的,按照先进先出
三、工作原理
1、每个service在内存中存储了一份数据
2、zookeeper启动时,将从实例中选举一个leader(Paxos协议,投票超过半数)
3、leader负责数据更新操作
4、一个数据更新成功,要当所有service在内存中修改成功
四、zookeeper角色
1.领导者(leader),负责进行投票的发起和决议,更新系统状态
2.学习者(learner),包括跟随者(follower)和观察者(observer)
3.follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票
4.Observer可以接受客户端请求,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。
5. 客户端(client),请求发起方
五、集群服务器个数
最好使用单数,因为zookeeper投票机制要过半才可以选择leader和更新数据,单数服务容灾更好,可以节约一台服务器。比如3台服务,允许故障一台,如果4台服务,也是只允许故障一台;防脑裂,偶数服务故障一半就无法工作
六、数据模型Znode
1、ZooKeeper拥有一个层次的目录结构,命名符合常规文件系统规范。
2、每个节点叫做znode,并且其拥有一个唯一的路径标识。节点znode可以包含数据和子节点, 用户对znode具有增、删、改、查等操作。
3、znode中的数据可以有多个版本,在查询该znode数据时就需要带上版本信息
4、znode可以被监控,该目录下某些信息的修改,例如节点数据、子节点变化等,可以主动通知监控注册的client。事实上,通过这个特性,可以完成许多重要应用,例如配置管理、信息同步、分布式锁等等
5、节点不支持部分读写,要一次性完整读写
6、ZooKeeper中的节点有两种,分别为临时节点和永久节点。临时znode的client与server断开连接,该znode将被自动删除,且临时Znode不能有子节点
七、watcher观察
watcher可以监控目录节点的数据变化及子节点的变化,一旦节点目录状态发生变化,服务器会通知所有设置在这个节点目录的上的watcher,从而每个客户端就知道节点目录发生变化,可以做出相应操作。
可以设置观察的操作:exists,getChildren,getData
可以触发观察的操作:create,delete,setData
- ZooKeeper 笔记
- Zookeeper笔记
- Zookeeper笔记
- Zookeeper 笔记
- zookeeper笔记
- Zookeeper笔记
- Zookeeper笔记
- ZooKeeper笔记
- zookeeper笔记
- ZooKeeper笔记
- zookeeper笔记
- ZooKeeper学习笔记:初识zookeeper
- 【学习笔记】--zookeeper
- ZooKeeper 安装配置笔记
- Zookeeper论文笔记
- zookeeper分布安装笔记
- zookeeper学习笔记一
- python zookeeper学习笔记
- ACM暑假训练 中石油oj 3737: 礼物(矩阵快速幂)
- StringUtils详解
- JSP相关技术 一、JSP3个编译指令和7个动作指令
- 匿名内部类创建对象
- mgrid与ogrid
- zookeeper笔记
- Eclipse 代码移植到AS之后
- JAVA中的四种JSON解析方式详解
- android 修改Toolbar 返回按钮的颜色以及自定义的图片
- 2017多校3 1011 RXD's date
- 1025. PAT Ranking (25)
- sublime使用不完全介绍视频教程
- Zabbix3.2监控charts图形自动发送邮件
- java用HttpURLConnection类获取servlet连接