ZooKeeper的基础原理及应用场景

一、ZooKeeper是什么?

     1. 是一个为用户的分布式应用程序提供协调的服务
              是为别的分布式程序服务的
             本身也是一个分布式程序(只要半数以上节点存储,就能正常提供服务)
     2.目标是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户

二、ZooKeeper的架构是什么?

      1. 核心组件:

          Server:数目一般选择为奇数(3,5,7)
          Leader
          Follower
          Client

       2.架构图:

        ZooKeeper的基础原理及应用场景

三、ZooKeeperd的核心是什么?

        仲裁机制,目录式数据结构

      1.仲裁机制:

           ZooKeeper需要在所有的服务(可理解为服务器)中选举出一个Leader,然后让这个Leader来负责管理集群。此时,集群中的其他服务器则成了此Leader的follower。并且,当Leader出现故障的时候,ZooKeeper要能够快速地在Follower中选举出下一个Leader。这就是ZooKeeper的Leader机制制(leader选举),具体的实现方法请参考其他博客。

       2.目录式数据结构:

            Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,如图 所示:


ZooKeeper的基础原理及应用场景


        


            Zookeeper 这种数据结构有如下这些特点(znode有两种类型,一种临时的(ephemeral),一种持久的(persistent)):
                     1.每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1
                     2.znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录
                     3.znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
                     4.znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了
                     5.znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2
                     6.znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍

四、ZooKeeper的应用场景 

        1. 配置管理
             (1)在分布式集群中,各个节点的配置文件同步文件。对集群中的一台机器的配置信息修改之后,希望能够快速同步到其他各个节点上,这可以交由ZooKeeper来实现
             (2)将配置文件信息写入到ZooKeeper的一个znode上,各个节点监听这个znode即可

        2.集群管理
             (1)在分布式集群中,各个节点的实时状态统计
             (2)将节点信息写入到ZooKeeper的一个znode上,监听这个znode可以获取它的实时状态变化
             (3)Hbase中Master状态监控和选举