Zookeeper
Zookeeper概述
zookeeper是一个开源的分布式应用协调服务,是集群的管理者,监视集群中各个几点的状态,根据节点的状态变化做出相应。主要提供分布式解决方案,如统一命名、状态同步(分布式锁)、集群管理(分布式服务注册中心)、分布式应用配置等等。其保证了CAP理论中的CP,即一致性、容错性。
注:CAP:Consistency一致性,节点间数据一致;Availability可用性,响应速度,用户体验;Partition tolerance容错性,
zookeeper角色
leader:负载投票、决议、更新系统状态
Follower:接受客户请求并向客户端返回结果,在选leader过程中参与投票
Observer:接受客户端连接,将写请求转发给leader节点,但是不参加选leader的投票,只会同步leader的状态,所以增加Observer节点可以扩展系统提高读取速度。
zookeeper机制
- 文件系统
zookeeper维护一个类似文件系统的数据结构。每个子目录如为一个节点(znode),节点分为两种,持久化节点和临时节点。
持久化节点在客户端与zookeeper断开连接之后,不会被删除,除非用户明确指定要删除这个节点;临时节点在客户端与zookeeper断开连接之后就会被删除 - 通知机制
客户端在zookeeper注册它关心的目录节点,当目录节点发生变化,客户端会受到zookeeper的通知。
zookeeper能做什么
- 命名服务
- 配置管理
把应用的配置放在zookeeper上,保存在zookeeper的某个目录节点中,然后所有的相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序都会受到Zookeeper的通知,然后从zookeeper获取新的配置信息并应用到系统中 - 集群管理
机器节点增删以及master选取。
节点增删:所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的自己点变化信息。一旦有机器挂掉,就表明机器与zookeeper连接断开,创建的临时目录节点被删除,所有其它机器都会收到通知。
Master选取:所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master - 分布式锁
基于zookeeper一致性文件系统实现分布式锁服务。锁服务氛围保存独占及时序控制。
保存独占:把zookeeper上的znode看做是一把锁,所有的客户端创建/distribute_lock节点,最终创建成功的客户端拥有锁,因为是临时节点,用完自动删除就释放锁。
时序控制:基于/distribute_lock锁,所有客户端在他下面创建临时顺序编号目录节点,和选master一样,编号最小的获取锁,用完删除。 - 队列管理
同步队列:当一个队列成员都聚齐时,队列才可用,在约定目录下创建临时目录节点,监听目录节点数据是否是要求的数目。
FIFO队列:临时有序节点,入队列有编号,出队列按编号出 - 分布式与数据控制
zookeeper作为一个集群提供一致的数据服务,本身就会做机器之间的数据复制,因此可以用来做分布式数据复制,提高容错性,提高系统的扩展能力,提高性能。
zookeeper工作模式
zookeeper核心是原子广播,依靠ZAB实现zookeeper机制
zookeeper有两种工作模式:恢复模式和广播模式
- 恢复模式
当服务启动或者在领导者崩溃时,进入恢复模式,开始选主。
follower开始投票,获取n/2+1票以上的follower节点成为leader节点,根据其它节点中存放的zxid来同步最新数据。
当大多数的Server完成了和Leader的状态同步后,恢复模式结束。 - 广播模式
广播模式就是zookeeper的正常工作流程