【颗粒归仓】--Zookeeper基本概念

  ZooKeeper是一个开放源代码的分布式协调服务,设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

  先来了解一些zookeeper的基本概念:

   1、数据节点:
     zookeeper中分为两类,一类是构成集群的机器,称为机器节点;第二类是数据模型中的数据单元,称之为数据节点(ZNode)。   zookeeper将所有的数据存储在内存,其数据模型是一棵树。
     ZNode分为持久节点和临时节点两类:
        持久节点:一旦节点被创建,除非主动进行ZNode的移除操作,否则这个ZNode将一直保存在zookeeper上
        临时节点:它的生命周期和客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被移除。
      zookeeper也会在创建节点时,为节点添加一个特殊属性:SEQUENTIAL。标记上该属性后,在创建这个节点时,zookeeper会自动在其节点名后面追加一个整型数字,由父节点维护。


    2、Watcher:事件监听器,是zookeeper的重要特性。用户在特定的节点上注册watcher,在一些特定事件触发时,zookeeper服务端会将事件通知到客户端。


   3、 ACL:
   zookeeper采用ACL(Access Control Lists)策略来进行权限控制。zookeeper定义了5种权限:
     CREATE:创建子节点的权限
     READ:获取节点数据和子节点列表的权限
     WRITE:更新节点数据的权限
     DELETE:删除子节点的权限
     ADMIN:设置节点ACL的权限


   4、ZooKeeper的ZAB协议
     ZAB协议(ZooKeeper Atomic Broadcast,ZooKeeper原子消息广播协议)是分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。基于该协议,ZooKeeper实现了一种主备模式的系统架构来保持集群中各副本之间数据的一致性。
     原理:ZooKeeper使用一个单一的主进程来接收并处理客户端的所有事务请求,并采用ZAB原子广播协议,将服务器数据的状态变更以事务Proposal的形式广播到所有的副本进行上去。
     ZAB协议的核心:定义了对于那些会改变ZooKeeper服务器数据状态的事务请求的处理方式。

     ZAB协议内容:
       包括两种基本的模式:崩溃恢复和消息广播
         当整个服务框架在启动过程中,或是当Leader服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB协议就会进入恢复模式并选举产生新的Leader服务器。当选举产生了新的Leader服务器,同时集群中已经有过半的机器与该Leader服务器完成了状态同步之后,ZAB协议就退出恢复模式。
         当集群中已有过半的Follower服务器完成了和Leader服务器的状态同步,那么整个服务框架就可以进入消息广播模式了。当一台同样遵守ZAB协议的服务器启动后加入到集群时,如果此时集群中已经存在一个Leader服务器在负责进行消息广播,那么新加入的服务器自觉进入数据恢复模式:找到Leader所在服务器,并与其进行数据同步,然后一起参与到广播流程中。
        为了保证事务的顺序一致性,zookeeper采用递增的事务id号(zxid)

原文地址:https://www.cnblogs.com/victor-grace/p/7253617.html