Zookeeper简介

Posted Hello

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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结构上。

 

 

以上是关于Zookeeper简介的主要内容,如果未能解决你的问题,请参考以下文章

Zookeeper简介

分布式专题——Zookeeper简介

一zookeeper简介

zookeeper系列之:zookeeper简介浅谈

ZooKeeper简介

Zookeeper简介