入门指南:使用ZooKeeper来协调分布式应用

这篇文档包含了让你快速上手ZooKeeper的信息。主要是针对那些想要试一把ZooKeeper的开发人员,包含了安装一个单一ZooKeeper服务器的简单指令,一些验证ZooKeeper是否运行的简单命令以及一个简单的编程例子。最后,为了方便,还写了一些关于更复杂的安装知识,比如运行一个备份的部署,以及优化事务记录。但是完整的商业部署过程需要参考ZooKeeper管理员指南

前期条件

系统要求请参考管理手册。

下载

为了获取ZooKeeper的发型版本,请从Apache下载镜像下载一个最新的稳定发型版本

单机操作

安装一个单机版的ZooKeeper服务器还是挺简单的。服务器包含一个JAR文件,因此安装过程就只包括了创建一个配置。

一旦你下载了一个稳定版的ZooKeeper发行版,将它解压到root下。

为了启动ZooKe,你需要一个配置文件。这里有一个样本,创建一个文件conf/zoo.cfg

tickTime=2000

dataDir=/var/lib/zookeeper

clientPort=2181

这个文件可以叫任何名字,但是为了方便起见,我们还是命名为conf/zoo.cfg。改变dataDir的值来指定一个已经存在的(开始是空的)目录。下面解释一下这几个属性:

ticktime:ZooKeeper使用的以milliseconds为单位的基本时间单位。它用于心跳检测,并且最小的会话超时时间是它的两倍。

dataDir:存储内存数据库快照的地方,除非指定,不然事务日志会更新到数据库中。

clientPort:监听客户端连接的接口。

现在你已经创建了一个配置文件了,你可开始启动ZooKeeper了:

bin/zkServer.sh start

这会让你执行一个简单的类似文件的操作。

一旦你连接上了,你会看到如下信息:

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

(注意到我们在做了一个get命令之后确实发现应设置了数据了)

最后我们通过delete来删除这个znode

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

要探索更多请看Programmer's Guide

ZooKeeper编程

ZooKeeper提供了Java和C语言接口。它们在功能上是一样的。C接口存在两个变种:单线程和多线程的。它们的差别仅仅在于消息循环是如何完成的。更多信息参见Programming Examples in the ZooKeeper Programmer's Guide

运行备份(Replicated)的ZooKeeper

运行单机版本的ZooKeeper在评估、开发以及测试的时候尚可。但是在生产环境中,你应该以集群的方式运行ZooKeeper。运行相同应用的一组服务器称之为quorum,在集群模式下,在quorum中的所有服务器都有相同的配置文件。

注意(敲黑板)

在集群模式下,最少需要3台服务器,并且强烈推荐你采用奇数台服务器。如果你仅仅有两台服务器,那么当其中的一台机器失效的时候,这里没有足够的机器来构成quorum中的大多数。两台服务器本质上要比单一服务器的稳定性差,因为这里有两个失效点。

集群模式的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是用来限制quorum中的服务器连接到一个leader的超时时间。配置项syncLimit限制了一个服务器可以和leader断开多久。

有了这些超时限制,你用tickTime这个时间单位来指定超时时间。在本例中,initLimit的超时时间是5个tick,也就是10s。

server.X的配置项列出了组成ZooKeeper服务的服务器。当一个服务开启的时候,它知道从那台服务器中的data directory中寻找myid文件。这个文件以ASCII码包含了服务器号码。

最后,注意到每个服务器名后面有两个端口号"2888"和"3888"。同类使用前一个端口号和其他同类相连。这种连接在同类之间进行交互是十分必要的,例如,同意更新的顺序。更多的,一个ZooKeeper服务器使用这个端口号来连接follows和leader。当一个新的leader选出来了后,一个follower会使用这个端口号开启对leader的TCP连接。,我们现在还需要另一个端口进行leader选举。即server项中的第二个端口号。

注意

如果你想要在一台机器上测试多个服务器的话,指定服务器的名字为localhost以及唯一的quorum和leader选举端口(即,2888:3888,2889:3889,2890:3890)对于服务器配置文件中的每个server.X配置项。当然,还要指定单独的dataDir和不同的客户端端口(在上面的集群例子中,运行在单个localhost主公,你仍需要3个配置文件)。

请注意在单台机器上安装多个服务器并不会有任何冗余的效果。如果机器宕机了,所有的ZooKeeper服务器都会离线。完全冗余的情况需要每个台服务器都安装在独立的机器上。必须是完全物理分隔的机器。在同一台物理机器上的多个虚拟机中仍然会有故障风险。

其他优化措施

这里有一些其他的可极大提高性能的配置参数:

为了是更新的延迟降低,必须要有一个目标事务日志目录。默认的事务日志是放在和数据快照和myid文件相同的目录中。dataLogDir参数指定用一个不同的目录来用于事务日志。

分布式服务框架 Zookeeper(三)官方入门指南的更多相关文章

  1. 分布式服务框架 Zookeeper(转)

    分布式服务框架 Zookeeper -- 管理分布式环境中的数据 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题 ...

  2. 分布式服务框架 Zookeeper — 管理分布式环境中的数据

    本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们理解. ...

  3. 大数据 --> 分布式服务框架Zookeeper

    分布式服务框架 Zookeeper Zookeeper系列 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

  4. 分布式服务框架Zookeeper

    协议介绍 zookeeper协议分为两种模式 崩溃恢复模式和消息广播模式 崩溃恢复协议是在集群中所选举的leader 宕机或者关闭 等现象出现 follower重新进行选举出新的leader 同时集群 ...

  5. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...

  6. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)

    本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...

  7. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop ...

  8. 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

  9. 分布式服务框架 Zookeeper(一)介绍

    一.概述 ZooKeeper(动物园管理员),顾名思义,是用来管理Hadoop(大象).Hive(蜜蜂).Pig(小猪)的管理员,同时Apache Hbase.Apache Solr.LinkedIn ...

  10. 【转】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

随机推荐

  1. 建立Spring项目的基础

    1.新建web项目 2.在lib下添加这五个包 3.新建applicationContext.xml(一定在src目录下)

  2. 通过映射缓存文件夹加速WPF的响应速度

    到了Visual Studio 2012时,WPF的设计器已经非常好用了,大多数的时候基本上可以抛弃Blend了.但是,仍然存在一些不令人满意的问题,那就是当项目非常大的时候,很多时候页面切换变得比较 ...

  3. 使用apt-cache search搜索想要的软件包

    环境: Ubuntu14.10 我在编译u-boot代码的时候遇到了如下问题: LD test/dm/built-in.o CC examples/standalone/stubs.o LD exam ...

  4. 全局流水ID号生成的几种方法

    这个问题源自于,我想找一个分布式下的ID生成器.  这个最简单的方案是,数据库自增ID.为啥不用咧?有这么几点原因,一是,会依赖于数据库的具体实现,比如,mysql有自增,oracle没有,得用序列, ...

  5. Microsoft office(1)分页符和分节符

    Microsoft office下的页面布局中的分页符和分节符的区别: 分页符:标记一页的终止并开始下一页的点 分节符:插入分节符并在下一页开始新节 一般情况下,分节符在分页符外围,分节符一般是各种格 ...

  6. iOS:Masonry 英文原档介绍

    Masonry 英文原档介绍: Masonry is still actively maintained, we are committed to fixing bugs and merging go ...

  7. linux驱动摸索 --驱动框架初始化(结合韦东山视频教程)

    一.驱动框架 初始化:insmod 加载 1.确定主设备号: 分为静态和动态分配,其中LED_GPIO_SIZE 表示支持的次设备号数目,一般默认为1. 相关实现代码如下: int result; d ...

  8. spring+mybatis项目启动报错Initializing Spring root WebApplicationContext

    这个问题很怪异,各种各样的情况都会导致这个问题的出现,主要是由于sping加载读取配置文件的时候出了问题.我在处理mybatis的时候出现了这个问题,后来排查发现,在mybatis的配置文件中如果有大 ...

  9. ARP协议具体解释之ARP动态与静态条目的生命周期

    ARP协议详细解释之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自己主动加入和删除. q  每一个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉 ...

  10. 通过idea 打包 spring maven项目打包为可执行jar包

    用assembly打包一直报错: shangyanshuodeMacBook-Pro:target shangyanshuo$ java -jar jobscrawler-1.0-SNAPSHOT-j ...