Zookeeper入门(翻译自Zookeeper官方网站Release 3.4.11版本)

目录总览

Standalone Operation(standaloneZooKeeper的一种模式) 管理ZooKeeper存储 连接到ZooKeeper ZooKeeper编程 复制模式运行Zookeeper

一、入门:使用ZooKeeper协调分布式应用程序

本文档将带您一起快速入门ZooKeeper。它主要针对希望尝试的开发人员,包含单个ZooKeeper服务器的简单安装说明,一些命令来验证它正在运行,以及一个简单的编程示例。最后,为了方便起见,有一些关于更复杂安装的部分,例如运行复制部署,以及优化事务日志。 但是,有关商业部署的完整说明,请参阅ZooKeeper管理员指南

1.1、先决条件

参阅管理指南中的系统要求。

1.2、ZooKeeper下载

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

1.3、Standalone Operation

在独立模式下设置ZooKeeper服务器非常简单。ZooKeeper服务器包含在单个JAR文件中,因此安装由创建一个配置文件组成。一旦你下载了一个稳定的ZooKeeper版本解压缩并cdroot目录。

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

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
复制代码

这个文件可以是任何文件(还是说可以任意命名?原文:This file can be called anything),但是为了这个讨论,把它叫做conf/zoo.cfg。更改dataDir的值以指定一个现有的(空开始)目录。 以下是每个字段的含义:

tickTime

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

dataDir

存储内存数据库快照的位置,以及除非另外指定,否则更新数据库的事务日志也是这个目录。

clientPort

监听客户端连接的端口。

现在您已经创建了配置文件,您可以启动ZooKeeper

bin/zkServer.sh start

在windows中采用zkServer.cmd开启服务器。

ZooKeeper日志消息输出采用log4j,程序员指南的日志部分提供了更多详细信息。您将看到日志消息输出到控制台(默认)或一个日志文件中,这取决于你对log4j配置。

以上描述的步骤是以独立模式运行ZooKeeper,没有复制。所以如果ZooKeeper进程失败,服务将会关闭。这在大多数开发情况下都可以,但是要以复制模式运行ZooKeeper,请参阅复制模式运行ZooKeeper

1.4、管理Zookeeper存储

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

1.5、连接到ZooKeeper

$ bin/zkCli.sh -server 127.0.0.1:2181

windows下采用zkCli.cmd -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
        createpath data acl
        stat path [watch]
        listquota path
        history
        setAcl path acl
        getAcl path
        sync path
        redo cmdno
        addauth scheme auth
        delete path [version]
        setquota -n|-b val path
复制代码

到这里,你可以尝试一些简单的命令来感受这个简单的命令行界面。首先,通过输入列表命令ls

[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
复制代码

请注意,我们在设置数据之后做了一个调整,确实发生了变化。

最后,我们通过发出以下命令来删除节点:

[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]
复制代码

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

1.6、Zookeeper编程

ZooKeeper有一个Java绑定和C绑定。 它们在功能上是等同的。 C绑定存在两种变体:单线程和多线程。 这些仅在消息传递循环完成方面有所不同。 有关更多信息,请参阅ZooKeeper程序员指南中的编程示例,了解使用不同API的示例代码。

1.7、复制模式运行Zookeeper

以独立模式运行ZooKeeper可方便进行评估,开发和测试。但在生产中,您应该以复制模式运行ZooKeeper。 在同一个应用程序中复制的服务器组称为quorum(冲裁)(这个地方可能不太对,后续改进),在复制模式下,quorum(冲裁)中的所有服务器都具有相同配置文件的副本。

对于复制模式,至少需要三台服务器,强烈建议您有一个奇数的服务器。 如果你只有两台服务器,那么你处于这样一种情况,那就是如果其中一台服务器出现故障,那么没有足够的机器来形成多数的quorums(冲裁)(这个地方可能不太对,后续改进)。两台服务器本质上不如一台服务器稳定,因为有两个单点故障。

复制模式所需的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用来限制quorum(冲裁)中的ZooKeeper服务器必须连接到leader的时间长度。条目syncLimit限制了服务器可以从leader处过期多久。

有了这两个超时,您可以使用tickTime指定时间单位。 在这个例子中,initLimit的超时值是2000个千分之一刻度或10秒钟的5个刻度。


OK!官方入门就翻译完成了!虽然翻译的质量不是特别滴好,但我觉得翻译的过程是非常享受且学的最多的。如有翻译不对的地方,请您在评论区发表评论告诉小编,么么哒!小编在校大四学生、年后实习工作咯!小编微信号:lifvalue,加我请备注掘金,大家一起交流学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值