zookeeper原理1.Zookeeper特性分析2.Zookeeper的分布式锁定机制3 .集群选举(1)新选举(2)非新选举)4.ZooKeeper机制5.Leader和follower机制1
1.Zookeeper特性分析
全局一致性、可靠性、顺序性、数据更新原子性、实时性
1 .全球一致性
最重要的特点是,即使每个服务器存储同一数据的副本并连接到该服务器,显示的数据也是一致的。
2 .可靠性
如果一台服务器接受,其他服务器接受
3 .顺序性
按顺序执行
4 .数据更新原子性
一次更新要么成功,要么失败,不存在中间状态
5 .实时性
zookeeper保证客户端在一定时间内获取服务器的更新信息或获取服务器的失效信息
2.Zookeeper的分布式锁定机制zookeeper的锁定有排他锁定和控制定时锁定两种
独占锁
1 .要求所有APP应用程序首先在zk上创建节点/xxx
节点要求:临时节点、非序列化节点
2 .成功创建的人将获得访问文件的权限
3 .操作已完成。 断开zk连接
4 .如果其他APP应用程序需要操作此文件,则侦听此目录是否存在。
返回(1)
控制时序锁
1 .要求所有APP应用程序首先向zk创建节点/xxx000n。 节点要求:临时节点、序列化节点
2 .按序列号访问文件,从小序列号开始先访问
3 .操作已完成。 断开zk连接
4 .其他APP应用操作文件按序列号进行
3 .集群选举(1)全新选举1、第一个节点开始,为自己投一票
2、然后与其他启动节点比较,发现没有其他节点,进入looking (选举状态)
3、第二个节点启动,给自己投票。 然后,将第一个节点与myid进行比较,数字大的节点为looking,数字小的节点为大的节点进行投票。 小变脸。
.
如果票数超过半数,选举结束,节点变为leading后的节点myid大于leading也没用,直接变为following。
)如果节点在运行正常的zookeeper群集(而不是全新的选举)中途关闭,需要重新进行选举,则选举过程必须包括数据Id、服务器Id和逻辑时钟
数据Id :
的版本很大,每次更新数据时都会更新版本
服务器Id :
是我们构成的myid
逻辑时钟:
该值从0开始增加,每次选举对应一个值。 如果
在同一次选举中,该值一致
这样,选举的标准
1 .逻辑时钟小的选举结果被忽视,重新投票
2 .统一逻辑时钟后,数据id大的一方获胜
3 .数据id相同时,服务器id大的一方获胜
根据这个规则选出leader
4.ZooKeeper的工作原理在zookeeper群集中,每个节点有以下三种角色和四种状态:
角色: leader、follower、observer
状态: leading、following、observing、looking
Zookeeper的核心是原子广播,该机制保证了各服务器之间的同步。 实现这一机制的协议称为Zab协议(zookeeperatomicbroadcastprotocol )。 Zab协议有两种模式:恢复模式(恢复选择)和广播模式(广播同步)。 服务启动或读取器崩溃后,Zab将进入恢复模式,选定读取器,大多数服务器与leader状态同步,然后恢复模式退出。 通过状态同步,leader和Server的系统状态相同。
为了确保事务顺序的一致性,zookeeper使用增量的事务id号(zxid )来标识事务。 所有建议(proposal )都在提交时加了zxid。 正在实现的zxid是一个64位数字,前32位用于标识epoch与leader的关系是否发生了变化。 每次选出一个leader时,都会识别出有新的epoch,现在属于该leader的统治时期。 后32位用于递增计数。
每个服务器在工作中有四种状态:
LOOKING :现在服务器不知道leader是谁,正在搜索中。
LEADING :现在的服务器是选举产生的leader。
FOLLOWING:leader已选定,当前正在与服务器同步。
观察员:观察员的行动大多数情况下与前锋完全一致,但他们不参加选举和投票,只接受选举和投票的结果。
5.Leader和follower工作流1.Leader工作流Leader主要有三个功能:
1 .恢复数据
2 .保持与follower的心跳,接收follower请求,判断follower的请求消息类型
3.follower的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据消息类型进行不同的处理。
PING消息是指follower的心率信息; REQUEST消息是follower发送的建议信息,包括写入请求和同步请求。
ACK消息是对follower建议的回复,如果半数以上的follower通过,commit应该建议
REVALIDATE消息用于延长会话的有效期。
2.Follower工作流Follower主要有四个功能:
对Leader的请求(PING消息、请求消息、ACK消息、REVALIDATE消息);
接收和处理Leader消息
接收客户端请求,如果是写入请求,则发送给Leader进行投票
返回客户端结果。
Follower消息吉鲁组处理来自Leader的消息,例如:
1.PING消息:心跳消息
2 .专业消息:由Leader发起的提案,要求Follower进行投票
3.COMMIT消息:服务器端最新建议的信息
4.UPTODATE消息:表示同步已完成
5.REVALIDATE消息:是根据Leader的REVALIDATE结果关闭要REVALIDATE的会话,还是允许接受消息
6 .同步消息:将同步结果返回给客户端。 此消息首先由客户端启动,用于强制获取最新更新。