目录
一、定义
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
二、优点
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安装(集群模式)
1、下载zookeeper解压安装
2、配置服务器编号(如果是单机版本安装忽略)
- 在数据存储路径dataDir配置目录的下创建myid文件
- 编辑myid文件,添加与server对应的编号
3、配置zoo.cfg文件
- 重命名conf/zoo_sample.cfg为zoo.cfg
-
修改数据存储路径配置dataDir
-
增加集群ip配置(如果是单机版本安装忽略):
server.2=ip1:2888:3888
server.3=ip1:2888:3888
server.4=ip1:2888:3888 -
上述集群ip参数解释:server.A=B:C:D
A是一个数字,表示这个是第几号服务器,对应myid配置的编号
B是这个服务器的ip地址
C是这个服务器与集群中的Leader服务器交换信息的端口
D是执行选举Leader时服务器相互通信的端口
4、启动命令bin/zkServer.sh start
九、zoo.cfg文件详解
1、tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个 心跳。它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
2、initLimit =10:LF初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限
3、syncLimit =5:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer
4、dataDir:数据文件目录+数据持久化路径
5、clientPort =2181:客户端连接端口
十、客户端命令
1.启动客户端:bin/zkCli.sh(服务端启动是bin/zkServer.sh start,多了start)
2.显示所有操作命令:help
3.查看当前znode中所包含的内容:ls path (watch:监听变化,一次监听一次有效)
4.查看当前节点详细数据:ls2 path
5.创建节点:create path data (默认是持久化节点,-e:临时节点 -s:自动带序号)
6.获得节点的值:get path (watch)
7.修改节点数据值: set path data
8.删除节点:delete path
9.递归删除节点:rmr path
10.查看节点状态:stat path
十一、其他
1、选举机制
投票选择超过半数成为leader,按照zookeeper启动顺序,超过半数最大myid一般为leader。
2、监听器原理
3、写数据流程