一、zookeeper简介
1.zoookeeper是一个分布式协调框架:即主要用在分布式系统中解决一些问题。
2.zookeeper的核心概念:树型文件系统、监听机制
树型文件系统:zookeeper中创建的节点都是以一个目录的的形式,构建成为一个树型层级
监听机制:客户端注册它关心的节点,节点发生变化后会通知客户端。
二、zookeeper节点特性
三、zookeeper使用场景
- 分布式配置中心
- 分布式注册中心
- 分布式锁
- 分布式队列
- 集群选举
- 分布式屏障
- 发布/订阅
四、zookeeper节点leader选举、zab协议
zookeeper服务启动后会监听三个端口:2021(服务接受客户端请求) 2088(zookeeper节点间选举)、3088(zookeeper节点间数据同步)
服务启动之后,就会向其它节点发起投票,同时也会收到其它节点的投票。会对选票做比较。
先比较周期大的、再比较zxid大的、再比较sid大的。
1.zookeeper leader选举机制图解:
流程图步骤详解(集群3个节点举例):
-
zookeeper第一个节点启动后,就会根据配置文件获取其它需要选举的节点信息,建立连接,并且发送选举信息
-
第二个节点启动后就能和第一个节点建立连接,它会发送自己的选举信息也会接受另一个节点的选举信息(这里为了避免连接重复做了处理只允许单项连接,怎么保证单项连接呢?判断当前连接请求的sit是否比自己小,只允许大的sid节点向小的节点发起连接),收到选举信息后,会对选举信息做比较,主要是三个方面的比较(1.选举周期,每参与一次选举过程,周期会加一. 2.zxid有命令执行就会触发zxid增加,代表数据的新旧程度 . 3.sid的大小,初始启动时,默认会选择sid大的节点 )
-
第三个节点启动:同样会和其它两个节点建立连接,发起选举但是其它节点会返回已选举的leader节点信息,该节点就会以folower节点身份加入集群。
2.1ZAB协议介绍。
zookeeper中设计的为了保证分布式情况下数据的一致性。
2.2ZAB协议流程图
流程图步骤详解: -
leader收到客户端命令后先写了本地数据文件
-
发送给follower节点的proposal信息包含着数据信息一并发送,follower节点收到后也是先写本地文件
-
leader收到半数以上节点回复的ack消息才会做commit动作,commit信息其实就是将本地文件内容加载到内存中,zookeeper查询的内容都是基于内存查询的。leader提交后就会向follower节点发送commit命令,同时向不参与投票的observer节点发送消息(包含数据)做同步。ZAB协议规定一个zxid消息在一台机器上commit上提交成功就一定会在其他机器上提交成功。如果leader机器上提交就未成功,消息就会被丢弃。
消息广播:消息广播就是客户端执行的命令怎么同步到follower节点
崩溃恢复:奔溃恢复就是针对数据同步过程中,leader节点commit失败(丢弃leader节点commit失败的数据),或者follower节点commit失败(保证了leader节点commit成功的其它节点一定会commit成功)两种情况的解决方案。
数据同步:
总结:zookeeper中值得学习的地方。
- 在服务间通信时使用了大量的内存阻塞队列来做了功能的解耦跟提高了并发处理效率。
- 是节点直接使用给的ZAB协议(zooleeper原子广播协议),用来保证分布式下节点的数据同步一致性。
- 集群选举半数以上投票选举和半数以上写文件成功再commit保证数据一致性。
zookeeper整体流程图
整体流程是大概说明客户端和服务端交互的流程:我们知道zookeeper的特性保证分布式数据一致性和watcher监听机制。
watcher机制:客户端在发送命令时如果对某一个节点监听了,就会创建响应的watcher和path的监听关系维护在客户端,当服务点响应了对应path的事件后,就会触发watcher事件。
数据一致性:节点间的zab协议保证。