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结构上。

     

  • 相关阅读:
    HDU4628+状态压缩DP
    Javascript 去掉字符串前后空格的五种方法
    Javascript 数组之判断取值和数组取值
    ASP.NET MVC 出现错误 “The view 'XXX' or its master was not found or no view engine support”
    ASP.NET MVC 页面调整并传递参数
    ASP.NET MV3 部署网站 报"Could not load file or assembly ' System.Web.Helpers “ 错的解决方法
    ASP.NET MVC 控制器向View传值的三种方法
    CSharp 如何通过拼接XML调用存储过程来查询数据
    SQLServer : EXEC和sp_executesql的区别
    关于SQLServer2005的学习笔记—异常捕获及处理
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6486581.html
Copyright © 2011-2022 走看看