ZooKeeper之独立模式运行教程(windows环境)(一)

来源:互联网 发布:淘宝滥发信息怎么申诉 编辑:程序博客网 时间:2024/06/16 00:51

ZooKeeper之独立模式运行教程(windows环境)

1.简介

                 之前的一篇关于ZooKeeper界面工具使用介绍中有一个摘自官网的简介,这里再啰嗦一遍:

ZooKeeper是一种用于分布式应用程序的分布式,开源协调服务。它暴露了一组简单的原语,分布式应用程序可以基于实现更高级别的服务进行同步,配置维护以及组和

命名。它被设计为易于编程,并使用在文件系统熟悉的目录树结构之后设计的数据模型。它运行在Java中,并且具有Java和C的绑定。

协调服务是非常难以正确的。他们特别容易出现种族条件和僵局等错误。ZooKeeper背后的动机是缓解分布式应用程序从头开始执行协调服务的责任。

2.设计目标

ZooKeeper很简单 ZooKeeper允许分布式进程通过与标准文件系统类似的共享分层命名空间相互协调。名称空间由ZooKeeper语法中的数据寄存器(称为znodes)组成,

这些类似于文件和目录。与专为存储设计的典型文件系统不同,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟数量。

ZooKeeper实现对高性能,高可用性,严格有序的访问非常重要。ZooKeeper的性能方面意味着它可以在大型分布式系统中使用。可靠性方面使其不会成为单点故障。严格的排序意味着复杂的同步原语可以在客户端实现。
ZooKeeper被复制。像它所协调的分布式进程一样,ZooKeeper本身也是被复制到一组称为合奏的主机上。

ZooKeeper服务如下图(贴自官网):       

3.数据模型和层次命名空间

ZooKeeper提供的名称空间与标准文件系统类似。名称是以斜杠(/)分隔的路径元素序列。ZooKeeper的名称空间中的每个节点都由路径标识。

   具有以下约束:

● 空字符(\ u0000)不能是路径名的一部分。(这会导致C绑定的问题)

● 以下字符无法使用,因为它们显示不正确,或以令人困惑的方式呈现:\ u0001 - \ u001F和\ u007F - \ u009F。

● 不允许使用以下字符:\ ud800 - uF8FF,\ uFFF0 - uFFFF。

● "."字符可以用作另一个名称的一部分,但是"." 和“..”不能单独用于指示沿路径的节点,因为ZooKeeper不使用相对路径。以下内容将无效:“/a/b/./c”或“/a/b/../c”。

● 令牌“zookeeper”被保留。

注意在分布式应用程序工程中,单词 节点可以指通用主机,服务器,组合成员,客户端进程等。在ZooKeeper文档中,znodes是指数据节点。 服务器 是指构成ZooKeeper服务的机器; 法定对等体是指构成集合的服务器; 客户端是指使用ZooKeeper服务的任何主机或进程。 

与标准文件系统不同,ZooKeeper命名空间中的每个节点都可以即是与其相关联的数据又是子节点。就像有一个允许文件也是目录的文件系统。(ZooKeeper设计用于

存储协调数据:状态信息,配置,位置信息等,因此存储在每个节点上的数据通常很小,字节到千字节范围)。我们使用术语 znode来表明我们正在谈论ZooKeeper数据节点。

Znodes维护统计结构,其中包括数据更改,ACL更改和时间戳的版本号,以允许缓存验证和协调更新。每次znode的数据发生变化时,版本号都会增加。例如,每当客

户端检索数据时,它也会收到数据的版本。
存储在命名空间中的每个znode处的数据以原子方式读取和写入。读取获取与znode相关联的所有数据字节,写入替换所有数据。每个节点都有一个访问控制列表

(ACL),它限制谁能做什么。

ZooKeeper还具有短暂节点的概念。只要创建znode的会话处于活动状态,就会存在这些znodes。当会话结束时,znode被删除。由于这种行为,短暂的znodes不允

许有孩子。。
序列节点 - 唯一命名
创建znode时,您也可以请求ZooKeeper在路径的末端附加单调增加的计数器。这个计数器是父znode唯一的。计数器的格式为%010d - 这是10位,0(零)填充

(计数器以这种方式进行格式化以简化排序),即“<path> 0000000001”。有关使用此功能的示例,请参阅 队列配方。注意:用于存储下一个序列号的计数器是由父节

点维护的带符号int(4字节),当递增超过2147483647(导致名称“<path> -2147483647”)时,计数器将溢出。

集装箱节点--->在3.6.0中添加

ZooKeeper具有容器节点的概念。容器节点是专用于节点,如领导,锁定等功能的专用节点。当容器的最后一个子节点被删除时,容器成为将要在某个时刻由服务器删除的候选项。
给定此属性,在容器节点中创建子节点时,应该准备好获取KeeperException.NoNodeException。即在容器节点内创建子节点时,始终检查KeeperException.NoNodeException,并在容器节点发生时重新创建。

ZNodes
ZooKeeper树中的每个节点都称为 znode。Znodes维护一个统计结构,包括数据更改版本号,acl更改。统计结构也有时间戳。版本号与时间戳记一起允许
ZooKeeper验证缓存并协调更新。每次znode的数据发生变化时,版本号都会增加。例如,每当客户端检索数据时,它也会收到数据的版本。当客户端执行更新或删除时,它必须提供正在更改的znode的数据版本。如果它提供的版本与数据的实际版本不匹配,则更新将失败。

Znodes are the main enitity that a programmer access. They have several characteristics that are worth mentioning here.
Watches
客户端可以在znode上设置手表。对znode的更改会触发手表,然后清除手表。当手表触发时,ZooKeeper会向客户端发送通知。有关手表的更多信息,请参见“ ZooKeeper手表 ”一节 。
Data Access
存储在命名空间中的每个znode处的数据以原子方式读取和写入。读取获取与znode相关联的所有数据字节,写入替换所有数据。每个节点都有一个访问控制列表(ACL),它限制谁能做什么。

ZooKeeper追踪时间多种方式:
● Zxid
对ZooKeeper状态的每次更改都会以zxid(ZooKeeper Transaction Id)的形式接收邮票。这显示了对ZooKeeper的所有更改的总排序。每个更改都将有一个唯一的zxid,如果zxid1小于zxid2,则zxid1发生在zxid2之前。
● 版本号
对节点的每次更改将导致该节点的其中一个版本号的增加。三个版本号是版本(znode的数据更改数),cversion(znode的子项更改次数)和aversion(znode的ACL更改次数)。
● Ticks
当使用多服务器ZooKeeper时,服务器使用ticks来定义事件的时间,例如状态上传,会话超时,对等体之间的连接超时等。勾选时间仅通过最小会话超时(2次刻度时间)间接暴露; 如果客户端请求超过最小会话超时的会话超时,服务器将告诉客户端会话超时实际上是最小会话超时。
● 即时的
除了在znode创建和znode修改之后将时间戳放入统计结构中,ZooKeeper不使用实时或时钟时间。


ZooKeeper统计结构
ZooKeeper中每个znode的Stat结构由以下字段组成:
● czxid
导致此znode创建的更改的zxid。
● mzxid
最后修改此znode的更改的zxid。
● pzxid
最后修改znode子项的zxid。
● ctime
创建这个znode的时间(以毫秒为单位)。
● 修改时间
这个znode最后一次被修改的时间(以毫秒为单位)。
● version
这个znode数据的更改次数。
● cversion
这个znode的孩子的更改次数。
● aversion
该znode的ACL的更改次数。
● ephemeralOwner
如果znode是短暂节点,则该znode的所有者的会话ID。如果它不是短暂节点,它将为零。
● DATALENGTH
该znode的数据字段的长度。
● numChildren
这个znode的孩子的数量。


4.简单的API

ZooKeeper的设计目标之一是提供一个非常简单的编程接口。因此,它仅支持以下操作:
创建
在树中的某个位置创建一个节点
删除
删除一个节点
存在
测试节点是否存在于某个位置
获取数据
从节点读取数据
设置数据
将数据写入节点
得到孩子
检索节点的子节点列表
同步
等待数据传播

5.安装与使用

5.1  下载:http://zookeeper.apache.org/releases.html

5.2  服务端启动:解压缩它和cd到根
要启动ZooKeeper,您需要一个配置文件。这里是一个示例,在conf / zoo.cfg中创建它:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
tickTime  滚动时间
ZooKeeper使用的基本时间单位(毫秒)。它用于做心跳,最小会话超时将是tickTime的两倍,最大回话超时将是tickTime的20倍 。
DATADIR
存储内存数据库快照的位置,除非另有规定,更新数据库的事务日志。
CLIENTPORT
端口监听客户端连接
现在您创建了配置文件,您可以启动ZooKeeper:
bin / zkServer.cmd启动:如下图所示

5.3  客户端启动:打开命令窗口cd 到bin目录

运行 zkCli.cmd -server 127.0.0.1:2181

如下图所示:

 由上图可看到help中的各种命令,具体语义可查看官网:http://zookeeper.apache.org/doc/trunk/index.html

阅读全文
1 0