zoukankan      html  css  js  c++  java
  • Zookeeper简介

     写在前面的话:读书破万卷,编码如有神

    --------------------------------------------------------------------

    参考内容:

      《私塾在线》,cc老师

    --------------------------------------------------------------------

    主要内容包括:

    • zookeeper简介
    • zookeeper安装和运行
    • zookeeper基本概念

    ------------------------------------------------------------------------------

    1、Zookeeper简介                                                                           

    (1)是什么

      Zookeeper是一个高性能的、开源的分布式系统的协调(Coordination)服务.

    (2)能干什么

      Zookeeper主要用来实现:配置管理、名字服务、提供分布式同步以及集群管理等服务,以及它们延伸的、变形的功能服务。

    (3)特点

    • 简单:Zookeeper允许程序通过一个共享的、类似于标准文件系统的、有组织的分层命名空间(znode)分布式处理协调。
    • 强一致性:Zookeeper用数字标记每一个更新,用它来反射出所有的事务顺序。随后的操作可以使用这个顺序去实现更高级的抽象。
    • 可靠:Zookeeper在处理协调的时候会自动复制多个主机。Zookeeper服务的组成部分彼此都知道彼此,它们维持了一个内存状态影像,连同事务日志和快照在一个持久化的存储中。
    • 高效:Zookeeper的数据保持在内存中,这就意味着它可以实现高吞吐量和低延迟的数据。Zookeeper在读比写多的时候运行的最好,读写大概比例在10:1  

    ------------------------------------------------------------------------------

    2、Zookeeper的安装运行                                                                    

    (1)到zookeeper官网去下载最新的稳定版本,目前是3.4.9

    (2)在centos7上面只需要解压,然后拷贝到相应的位置即可

    (3)进入conf文件夹下面,拷贝zoo_sample.cfg为zoo.cfg

    (4)修改zoo.cfg文件的相应配置参数

    zoo.cfg配置文件参数说明:

    • tickTime: Zookeeper使用的基本时间,时间单位为毫秒。它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。
    • dataDir: 保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。
    • clientPort: 监听客户端连接的端口。

    (5)启动、关闭、客户端连接

    启动:

      在zookeeper的bin目录下,执行:  ./zkServer.sh start

    关闭:

      在zookeeper的bin目录下,执行:  ./zkServer.sh stop  

    客户端连接:

      在zookeeper的bin目录下,执行  ./zkCli.sh

    ------------------------------------------------------------------------------

    3、Zookeeper的基本概念                                                                   

    (1)Zookeeper数据模型

    如上图所示,Zookeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称作一个ZNode。每个ZNode都可以通过其路径唯一标识,比如上图中第三层的第一个ZNode,它的路径是/app1/c1。在每个ZNode上可存储少量数据(默认是1M,可以通过配置修改,通常不建议在ZNode上存储大量的数据)。

      另外,每个ZNode上还存储了其Acl消息(access control list),这里需要注意,虽然ZNode的树形结构跟Unix文件系统很类似,但是其Acl与Unix文件系统是完全不同的,每个ZNode的Acl是独立的,子结点不会继承父结点的。

    (2)Znode的数据模型

      Znode维护了一个stat结构,这个stat包含数据变化的版本号、访问控制列表变化、还有时间戳。 版本号和时间戳一起,可让Zookeeper验证缓存和协调更新。每次znode的数据发生了变化,版本号就增加。

      例如,无论何时客户端检索数据,它也一起检索数据的版本号。并且当客户端执行更新或删除时,客户端必须提供它正在改变的znode的版本号,如果它提供的版本号和真实的数据版本号不一致,更新将会失败。

    Zookeeper中的每个znode的stat机构都由下面的字段组成:

    • czxid -- 引起这个znode创建的zxid
    • mzxid -- znode最后更新的zxid
    • ctime -- znode被创建的毫秒数(从1970年开始)
    • mtime -- znode最后被修改的毫秒数(从1970年开始)
    • dataversion -- znode数据变化号
    • cversion -- znode子节点变化号
    • aversion -- znode访问控制列表的变化号
    • ephemeralOwner -- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0.
    • dataLength -- znode的数据长度
    • numChildren -- znode子节点数量

    (3)ZNode分类

    ZNode根据其本身的特性,可以分为下面两类:

    • 持久型ZNode,用户需要显示的创建、删除
    • Ephemeral ZNode,临时型ZNode,用户创建它之后,可以显示的删除,也可以在创建它的Session结束后,由Zookeeper Server自动删除。这些znode一旦session创建就存在,session结束就被删除,因为这个特性,临时节点不允许有子节点。

    (4)Zookeeper里的计时

    Zookeeper通过多种方式追踪计时:

    1. Zxid(事务ID):每个Zookeeper状态的变化都以zxid的形式接收到标记。这个是Zookeeper所有变化的总排序。每个变化都会有一个zxid,并且zxid1早于zxid2则zxid1一定小于zxid2.
    2. 版本号:节点的每个变化都会引起那个节点的版本号的其中之一增加。这三个版本号是: version(znode的数据变化版本号)、cversion(子目录的变化版本号)、aversion(访问控制列表的变化版本号)。
    3. Ticks:当使用多服务器的Zookeeper时,服务器使用ticks定义事件的时间,如状态上传,会话超时,同事之间的连接超时等等。tick次数只是通过最小的会话超时间接暴露; 如果一个客户端请求的会话超时小于最小的会话超时,服务器就会告诉客户端会话超时实际上是最低会话超时时间。
    4. Real time: Zookeeper不使用实时或时钟时间,除了将时间戳加载znode创建和更新的stat结构上。

     

  • 相关阅读:
    [MSDN] How to Debug a Release Build
    抽象成员 虚方法
    强制类型转换符 和 as 运算符
    一份超长的MySQL学习笔记
    Java反射基础
    c3p0config.xml
    一个JDBC封装工具类
    Spring5——IOC操作Bean管理(基于xml文件)
    Android游戏开发大全
    移除项目里的所有.svn命令
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6486581.html
Copyright © 2011-2022 走看看