ZooKeeper3.5.5 安装与使用 中文文档


文章目录

        • 2.1.2 Getting Started:一个教程风格的指南,供开发人员安装、运行和编程到ZooKeeper。
          • 2.1.2.1 先决条件
          • 2.1.2.2 下载
          • 2.1.2.3 独立式操作
          • 2.1.2.4 Managing ZooKeeper Storage
          • 2.1.2.5 Connecting to ZooKeeper
          • 2.1.2.6 Programming to ZooKeeper
          • 2.1.2.7 Running Replicated ZooKeeper
          • 2.1.2.8 其它优化


2.1.2 Getting Started:一个教程风格的指南,供开发人员安装、运行和编程到ZooKeeper。

这个文档包含了一些信息,可以帮助您快速了解ZooKeeper。它主要针对希望尝试它的开发人员,包含单个ZooKeeper服务器的简单安装说明、验证它正在运行的几个命令和一个简单的编程示例。最后,为了方便起见,有几个部分涉及更复杂的安装,例如运行复制部署和优化事务日志。但是,有关商业部署的完整说明,请参阅ZooKeeper Administrator’s Guide。

2.1.2.1 先决条件

See System Requirements in the Admin guide.

2.1.2.2 下载

要获得ZooKeeper发行版,请从Apache下载镜像之一下载最近的稳定版本。

2.1.2.3 独立式操作

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

一旦你下载了一个稳定的ZooKeeper发行版,把它和cd解压到根目录

要启动ZooKeeper,需要一个配置文件。这是一个例子,创建它在conf/zoo.cfg:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

这个文件可以被任何东西调用,但是为了便于讨论,将其命名为conf/zoo.cfg。更改dataDir的值,以指定一个现有目录(以空目录开始)。下面是每个字段的含义:

  • tickTime : ZooKeeper使用的以毫秒为单位的基本时间单位。它用于心跳,最小会话超时将是 tickTime的两倍。
  • dataDir : 存储内存中数据库快照的位置,以及更新到数据库的事务日志(除非另有指定)。
  • clientPort : 监听客户机连接的端口。
    现在你已经创建了配置文件,你可以启动ZooKeeper:
bin/zkServer.sh start

ZooKeeper使用log4j记录消息——程序员指南的日志部分提供了更多详细信息。您将看到日志消息到达控制台(缺省)和/或日志文件,这取决于log4j配置。这里概述的步骤以独立模式运行ZooKeeper。没有复制,所以如果ZooKeeper进程失败,服务将会关闭。对于大多数开发情况,这是可以的,但是要以复制模式运行ZooKeeper,请参见Running Replicated ZooKeeper.

2.1.2.4 Managing ZooKeeper Storage

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

2.1.2.5 Connecting to ZooKeeper
$ bin/zkCli.sh -server 127.0.0.1:2181

这允许您执行简单的类似文件的操作。
一旦连接起来,您应该会看到如下内容:

Connecting to localhost:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
Welcome to ZooKeeper!
JLine support is enabled
[zkshell: 0]

在shell中,键入help,获得可以从客户端执行的命令列表,如下所示:

[zkshell: 0] help
ZooKeeper host:port cmd args
    get path [watch]
    ls path [watch]
    set path data [version]
    delquota [-n|-b] path
    quit
    printwatches on|off
    create path data acl
    stat path [watch]
    listquota path
    history
    setAcl path acl
    getAcl path
    sync path
    redo cmdno
    addauth scheme auth
    delete path [version]
    deleteall path
    setquota -n|-b val path

从这里开始,您可以尝试一些简单的命令来了解这个简单的命令行界面。首先,像在ls中一样,从发出list命令开始,生成:

[zkshell: 8] ls /
[zookeeper]

接下来,通过运行create /zk_test my_data创建一个新的znode。这将创建一个新的znode并将字符串my_data与该节点关联。您应该看到:

[zkshell: 9] create /zk_test my_data
Created /zk_test

发出另一个ls /命令查看目录是什么样子的:

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

注意,现在已经创建了zk_test目录。
接下来,运行get命令验证数据是否与znode关联,如下所示:

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

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

[zkshell: 14] set /zk_test junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0
[zkshell: 15] get /zk_test
junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0

(注意,我们在设置数据之后做了一个get,它确实改变了。
最后,我们通过发出命令来delete一个节点:

[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]

就这些了。要了解更多信息,请继续阅读本文的其余部分,并参阅Programmer’s Guide.

2.1.2.6 Programming to ZooKeeper

ZooKeeper有Java绑定和C绑定。它们在功能上是等价的。C绑定有两种变体:单线程和多线程。这些区别只在于消息传递循环是如何完成的。有关更多信息,请参阅 Programming Examples in the ZooKeeper Programmer’s Guide ,了解使用不同api的示例代码。

2.1.2.7 Running Replicated ZooKeeper

在独立模式(standalone mode )下运行ZooKeeper便于评估、开发和测试。但是在生产中,应该以复制模式(replicated mode)运行ZooKeeper。同一应用程序中的复制服务器组称为quorum(集群),在复制模式下,集群中的所有服务器都具有相同配置文件的副本。

Note:对于复制模式,至少需要三个服务器,强烈建议使用奇数个服务器。如果您只有两台服务器,那么您将处于这样一种情况:如果其中一台服务器发生故障,则没有足够的机器来形成多数集群。两台服务器本质上比一台服务器更不稳定,因为有两个单点故障。

复制模式所需的conf/zoo.cfg文件类似于独立模式中使用的文件,但有一些不同。举个例子:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

新的条目initLimit是超时ZooKeeper用来限制仲裁中的ZooKeeper服务器必须连接到leader的时间长度。条目syncLimit限制了服务器与领导者之间的过时程度。

对于这两个超时,您可以使用tickTime指定时间单位。在本例中,initLimit的超时为5个滴答,每滴答为2000毫秒,即10秒。

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

最后,注意每个服务器名称后面的两个端口号:“2888”和“3888”。对等点使用前一个端口连接到其他对等点。这样的连接是必要的,以便对等方能够通信,例如,就更新的顺序达成一致。更具体地说,ZooKeeper服务器使用这个端口将追随者连接到领导者。当新的leader出现时,follower使用这个端口打开到leader的TCP连接。因为默认的领导人选举也使用TCP,所以我们目前需要另一个端口来进行领导人选举。这是服务器条目中的第二个端口。

Note:如果您想要在一台机器上测试多个服务器,请为每台服务器指定servername作为localhost,并使用惟一的quorum & leader选择端口(如上面示例中的2888:3888、2889:3889、2890:3890)。服务器配置文件中的X。当然,单独的_dataDir_s和不同的_clientPort_s也是必要的(在上面的复制示例中,运行在一个本地主机上,仍然有三个配置文件)。

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

2.1.2.8 其它优化

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

  • 为了获得较低的更新延迟,有一个专用的事务日志目录是很重要的。默认情况下,事务日志与数据快照和myid文件放在同一个目录中。dataLogDir参数表示用于事务日志的另一个目录。
  • [tbd: what is the other config param?]

你可能感兴趣的:(ZooKeeper)