2.zookeeper入门指南

来源:互联网 发布:sql查询管理器怎么打开 编辑:程序博客网 时间:2024/06/07 01:18

原文:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html

下载

要获取ZooKeeper 发行版,请从其中一个Apache下载镜像下载最新的 稳定版本。

独立模式

在独立模式下设置ZooKeeper服务器非常简单。服务器包含在单个JAR文件中,因此安装包括创建配置。


一旦你下载了一个稳定的ZooKeeper版本解压缩它和cd到根目录

要启动ZooKeeper,您需要一个配置文件。下面是一个示例,在conf / zoo.cfg中创建它:

tickTime = 2000dataDir = / var / lib / zookeeperclientPort = 2181


这个文件可以被称为任何东西,但是为了这个讨论,它叫conf / zoo.cfg 。更改dataDir的值以指定现有的(空的开始)目录。以下是每个字段的含义:


tickTime
ZooKeeper使用的基本时间单位(毫秒)。它用于做心跳,最小会话超时将是tickTime的两倍。


dataDir
用于存储内存数据库快照的位置,以及除非另有规定,否则更新数据库的事务日志。


clientPort
该端口监听客户端连接


现在你创建了配置文件,你可以启动ZooKeeper:


bin / zkServer.sh start
ZooKeeper使用log4j记录消息 - “程序员指南”的“ 记录”部分提供了更多详细信息 。您将看到日志消息到控制台(默认)和/或日志文件,具体取决于log4j配置。


这里概述的步骤在独立模式下运行ZooKeeper。没有复制,因此如果ZooKeeper进程失败,服务将会关闭。这对大多数开发情况来说很好,但要以复制模式运行ZooKeeper,请参阅运行复制ZooKeeper。


管理ZooKeeper存储

对于长期运行的生产系统,ZooKeeper存储必须从外部管理(dataDir和logs)。有关更多详细信息,请参阅维护部分 。


连接到ZooKeeper
$ bin / zkCli.sh -server 127.0.0.1:2181
这使您可以执行简单的类文件操作。

连接后,您应该会看到:
连接到localhost:2181log4j:WARN找不到追加器logger(org.apache.zookeeper.ZooKeeper)。log4j:WARN请正确初始化log4j系统。欢迎来到ZooKeeper!启用JLine支持[zkshell:0]
 从shell中,键入help以获取可以从客户端执行的命令的列表,如:
[zkshell:0]帮助ZooKeeper主机:端口cmd参数        获取路径[watch]        ls path [watch]        设置路径数据[version]        delquota [-n | -b]路径        放弃        printwatches打开|关闭        创建路径数据acl        stat路径[watch]        listquota路径        历史        setAcl路径acl        getAcl路径        同步路径        redo cmdno        addauth方案auth        删除路径[version]        deleteall路径        setquota -n | -b val path

从这里,你可以尝试几个简单的命令来获得这个简单的命令行界面的感觉。首先,通过发出list命令开始,如ls中所示:

[zkshell:8] ls /
[zookeeper]
        
接下来,通过运行create / zk_test my_data创建一个新的znode 。这将创建一个新的znode并将字符串“my_data”与节点相关联。你应该看到:

[zkshell:9] create / zk_test my_data创建/ zk_test
      
发出另一个ls /命令以查看目录:

[zkshell:11] ls /[zookeeper,zk_test]

请注意,现在已经创建了zk_test目录。

接下来,通过运行get命令验证数据是否与znode相关联,如:

[zkshell:12] get / zk_testmy_datacZxid = 5ctime = Fri Jun 05 13:57:06 PDT 2009mZxid = 5mtime = Fri Jun 05 13:57:06 PDT 2009pZxid = 5cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0dataLength = 7numChildren = 0

我们可以通过发出set命令来更改与zk_test关联的数据,如:

[zkshell:14] set / zk_test junkcZxid = 5ctime = Fri Jun 05 13:57:06 PDT 2009mZxid = 6mtime = Fri Jun 05 14:01:52 PDT 2009pZxid = 5cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0dataLength = 4numChildren = 0[zkshell:15] get / zk_test垃圾cZxid = 5ctime = Fri Jun 05 13:57:06 PDT 2009mZxid = 6mtime = Fri Jun 05 14:01:52 PDT 2009pZxid = 5cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0dataLength = 4numChildren = 0
(注意,我们在设置数据后做了一个get,它确实,改变了。

最后,让我们删除节点,发出:
[zkshell:16] delete / zk_test[zkshell:17] ls /[zookeeper][zkshell:18]

这是现在。要了解更多信息,请继续阅读本文档的其余部分,并参阅“ 程序员指南”。

编程到ZooKeeper
ZooKeeper有一个Java绑定和C绑定。它们在功能上是等效的。C绑定存在两种变体:单线程和多线程。这些不同仅在于如何完成消息循环。有关更多信息,请参阅ZooKeeper程序员指南中的编程示例,了解使用不同API的示例代码。
运行复制ZooKeeper
运行ZooKeeper在独立模式方便评估,一些开发和测试。但在生产中,应该以复制模式运行ZooKeeper。同一应用程序中的复制服务器组称为仲裁,在复制模式下,仲裁中的所有服务器都具有相同配置文件的副本。

注意
对于复制模式,至少需要三个服务器,强烈建议您使用奇数个服务器。如果您只有两个服务器,那么您处于这样的情况:如果其中一个失败,则没有足够的计算机来形成多数仲裁。两个服务器本质上 不如 单个服务器稳定,因为存在两个单点故障。


复制模式 所需的conf / zoo.cfg文件与独立模式下使用的 conf / zoo.cfg文件类似,但有一些区别。这里是一个例子:
tickTime = 2000dataDir = / var / lib / zookeeperclientPort = 2181initLimit = 5syncLimit = 2server.1 = zoo1:2888:3888server.2 = zoo2:2888:3888server.3 = zoo3:2888:3888
新条目initLimit是超时ZooKeeper用于限制ZooKeeper服务器在仲裁中必须连接到领导的时间长度。条目syncLimit限制服务器从领导者过期的时间。

对于这两个超时,您使用tickTime指定时间 单位。在此示例中,initLimit的超时在2000毫秒a tick或10秒时为5个tick。

表单server.X的条目列出组成ZooKeeper服务的服务器。当服务器启动时,它通过在数据目录中查找文件myid来知道它是哪个服务器 。该文件包含服务器号,以ASCII。

最后,请注意每个服务器名称后面的两个端口号:“2888”和“3888”。对等体使用前端口连接到其他对等体。这种连接是必要的,使得对等体可以进行通信,例如,以同意更新的顺序。更具体地说,ZooKeeper服务器使用此端口将跟随者连接到领导者。当新的领导出现时,跟随者使用该端口打开到领导的TCP连接。因为默认的leader选择也使用TCP,我们当前需要另一个端口用于leader选举。这是服务器条目中的第二个端口。

注意
如果要在单个计算机上测试多个服务器,请为每个服务器在每个服务器上指定具有唯一仲裁和领导者选择端口(即上例中的2888:3888,2889:3889,2890:3890)配置文件。当然还需要单独的dataDir和不同的clientPort(在上面的复制示例中,在单个localhost上运行,您仍然有三个配置文件)。

请注意,在单个计算机上设置多个服务器不会创建任何冗余。如果发生了导致机器死亡的事情,所有的zookeeper服务器将离线。完全冗余要求每个服务器都有自己的机器。它必须是一个完全独立的物理服务器。同一物理主机上的多个虚拟机仍然容易受到该主机的完全故障的影响。

其他优化
还有一些其他配置参数可以大大提高性能:

为了获得更新的低延迟,重要的是有一个专用的事务日志目录。默认情况下,事务日志与数据快照和myid文件放在相同的目录中。dataLogDir参数指示用于事务日志的不同目录。

0 0