分布式协调服务-zookeeper

目录

 

初步认识zookeeper

zookeeper是什么

zookeeper能做什么

数据分布订阅/配置中心

负载均衡

分布式锁

master选举

概念

数据模型

会话

Watcher

ACL

 


初步认识zookeeper

分布式协调服务-zookeeper

zookeeper是一个开源的分布式协调服务,是由雅虎创建的,基于google chubby。

zookeeper是什么

分布式数据一致性的解决方案

zookeeper能做什么

数据分布订阅/配置中心

实现配置信息的集中式管理和数据的动态更新

实现配置中心有两种模式:push、pull 推模式和拉模式。推模式一般是服务器主动向客户端推送消息,拉模式是客户端主动去服务器获取数据(通常是定时轮询的)

zookeeper采用的是推拉相结合的方式。客户端向服务器端注册自己需要关注的节点。一旦节点数据发生变化,那么服务器端就会向客户端发送watcher事件通知。客户端收到通知后,主动到服务器端获取更新后的数据

负载均衡

请求/数据分摊多个计算机单元上

分布式锁

master选举

角色:

leader

leader是zookeeper集群的核心

  1. 事务请求的唯一调度者和处理者,保证集群事务处理的顺序性
  2. 集群内部各个服务器的调度者   

follower

  1. 处理客户端非事务请求,以及转发事务请求给leader服务器
  2. 参与事务请求提议的投票(客户端的一个事务请求,需要半数服务器投票通过以后才能通知leader commit;leader会发起一个提案,要求follow投票)
  3. 参与leader选举的投票

observer

  1. 观察zk集群中最新状态的变化并将这些状态同步到observer服务器上
  2. 增加observer不影响集群中事务处理能力,同时还能提升集群中非事务处理的能力

选举:

概念:

  1. Zookeeper的服务器三种角色:Leader,Follower,Observer。Leader提供读和写,Follower提供读,参与过半投票,Observer只提供读,不参与投票,可以提高读性能。
  2. ZXID,事务ID,用来唯一标识一次服务器状态的变更
  3. myid,服务器SID,一个数字,通过配置文件配置,唯一

选举有两种情况,一是服务器启动的投票,二是运行期间的投票。

启动时投票

  1. 每个服务器发送一个投票(SID,ZXID),其中sid是自己的myid,初始阶段都将自己投为Leader。
  2. 接收来自其他服务器的投票。首先判断投票有效性,包括验证是否是来自Looking状态的服务器。
  3. 处理投票,针对每个投票都按以下规则与自己的投票PK,PK后依据情况是否更新投票,再发送给其他机器。
  • 优先检查ZXID,ZXID较大者优先为Leader
  • 如果ZXID相同,检查SID,SID较大者优先为Leader
  1. 统计投票:每次投票后,服务器统计所有投票,判断是否有过半的机器收到相同的投票,如果某个投票达到一半的要求,则认为该投票提出者可以成为Leader。
  2. 改变服务器状态:一旦确定了Leader,每个服务器都更新自己的状态,Leader变更为Leading,Follower变更为Following

正常情况下一旦选出一个Leader则一直会保持,除非Leader服务器宕掉☭,则再进行重新选举。

运行时投票

  1. 变更状态
  2. 当Leader宕机后,余下的所非Observer的服务器都会将自己的状态变更为Looking,然后开启新的Leader选举流程。
  3. 每个服务器发出一个投票。生成(SID,ZXID)信息,注意运行期间的ZXID可能是不同的,但是在投票时都会将自己投为Leader,然后发送给其他的服务器。
  4. 接收来自各个服务器的投票
  5. 处理投票,规则与初次启动时相同。
  6. 统计投票
  7. 改变服务器状态

概念

数据模型

分布式协调服务-zookeeper

zookeeper的数据模型和文件系统类似,每一个节点称为:znode.  是zookeeper中的最小数据单元。每一个znode上都可以保存数据和挂载子节点。 从而构成一个层次化的属性结构

zookeeper节点分为四种

  • 持久化节点  : 节点创建后会一直存在zookeeper服务器上,直到主动删除,创建节点的客户端与zk断开连接后,该节点依旧存在
  • 持久化有序节点 :每个节点都会为它的一级子节点维护一个顺序,在创建节点时,zk根据创建的时间顺序该该节点名称进行编号
  • 临时节点 : 临时节点的生命周期和客户端的会话保持一致。当客户端会话失效,该节点自动清理。当创建临时节点的客户端与zk断开连接时,临时节点会被删除
  • 临时有序节点 : 在临时节点上多了一个顺序性特性

会话

分布式协调服务-zookeeper

客户端和服务器建立连接的时候就属于一个会话

分布式协调服务-zookeeper

Watcher

zookeeper提供了分布式数据发布/订阅,zookeeper允许客户端向服务器注册一个watcher监听。当服务器端的节点触发指定事件的时候会触发watcher。服务端会向客户端发送一个事件通知 watcher的通知是一次性,一旦触发一次通知后,该watcher就失效

ACL

zookeeper提供控制节点访问权限的功能,用于有效的保证zookeeper中数据的安全性。避免误操作而导致系统出现重大事故。

ACL是Access Control Lists 的简写, ZooKeeper采用ACL策略来进行权限控制,有以下权限:

CREATE:创建子节点的权限

READ:获取节点数据和子节点列表的权限

WRITE:更新节点数据的权限

DELETE:删除子节点的权限

ADMIN:设置节点ACL的权限

分布式协调服务-zookeeper