ZOOKEEPER
一、概述
是一个开源的分布式的,为分布式应用提供协调服务的Apache项目
基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据发送变化,zookeeper就将负责通知注册的观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式
Zookeeper = 文件系统 + 通知机制
二、应用场景
提供的服务包括:
1、分布式消息和协调机制
2、服务器节点动态上下线
3、统一配置管理
4、负载均衡
5、集群管理
场景:
1、数据发布与订阅
2、软负载均衡
3、集群管理
三、本地模式安装部署
配置:
将zoo_sample.cfg改成zoo.cfg
修改dataDir路径为zookeeper-3.4.10/data/zkData
创建zkData文件夹
参数解读:
tickTime
通信心跳数(默认2000,即2秒)
initLimit
LF初始通信时限(默认10心跳数)
syncLimit
LF同步通信时限(默认5心跳数)
dataDir
数据文件目录+数据持久化路径
ClientPort
客户端连接端口2181
分布式安装部署在本地基础上:
zoo.cfg加配置
server.1=hadoop001:2888:3888
dataDir下配置一个文件myid
四、数据结构
数据模型的结构与Unix文件系统很类似,整体上可以看做是一棵树,每个节点称作一个ZNode
很显然zookeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,其上的每一个节点,我们称之为“znode”,每一个znode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识
五、选举机制
1、半数机制
集群中半数以上机器存活,集群可用。所以zookeeper适合装在奇数台机器上
2、虽然在配置文件中没有指定master和slave,但是在工作时,是有一个节点为leader,其他的则为follower,leader是通过内部的选举机制临时产生的
六、特点
1、zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群
2、leader负责进行投票的发起和决议,更新系统状态
3、follower用于接收客户请求并向客户端返回结果,在选举leader过程中参与投票
4、集群中只要有半数以上节点存活,zookeeper集群就能正常服务
5、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
6、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
7、数据更新原子性,一次数据更新要么成功,要么失败
8、实时性,在一定的时间范围内,client能读到最新数据
Znode类型
短暂(ephemeral)
临时目录节点
临时顺序编号目录节点
持久(persistent)
持久化目录节点
持久化顺序编号目录节点
七、监听器原理
1、main()线程
2、创建zkClient
3、getChildren("/" , true)
4、Client:ip:port:/path
5、"/"路径数据发生变化
6、process()
八、监听服务器节点动态上下线案例
需求:某分布式系统中,主节点可以有多台,可以动态上下线,任意一台客户端都能实时感知到主节点服务器的上下线
分析
1、服务端启动时去注册信息(创建都是临时节点)
2、客户端启动就去getChildren,获取到当前在线服务器列表,并且注册监听
3、服务器节点下线
4、服务器节点上下线事件通知就会发给客户端
5、客户端回调process() {重新再去获取服务器列表,并注册监听}