ZooKeeper入门指南

目录:

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

    • 先决条件
    • 下载
    • 独立操作
    • 管理ZooKeeper存储
    • 连接到ZooKeeper
    • 编程到ZooKeeper
    • 运行复制的ZooKeeper
    • 其他优化

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

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

先决条件

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

下载

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

独立操作

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

下载完一个稳定的ZooKeeper版本后,将其解压缩并cd到root

要启动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,请参阅运行Replicated ZooKeeper。

管理ZooKeeper存储

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

连接到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 argsget path [watch]ls path [watch]set path data [version]delquota [-n|-b] pathquitprintwatches on|offcreate path data aclstat path [watch]listquota pathhistorysetAcl path aclgetAcl pathsync pathredo cmdnoaddauth scheme authdelete path [version]deleteall pathsetquota -n|-b val path

从这里,您可以尝试一些简单的命令来感受这个简单的命令行界面。首先,从发出list命令开始,如ls:,产生:

[zkshell: 8] ls /
[zookeeper]

接下来,通过运行创建一个新的znode create /zk_test my_data。这将创建一个新的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]

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

编程到ZooKeeper

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

运行复制的ZooKeeper

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

######注意

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

复制模式所需的 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服务器连接到领导者的时间长度。条目syncLimit限制服务器与领导者的过期时间。

使用这两个超时,您可以使用tickTime指定时间 单位。在这个例子中,initLimit的超时是2000个milleseconds(滴答)或10秒的5个滴答。

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

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

######注意

如果要在一台计算机上测试多个服务器,请将servername指定为localhost,并为该服务器中的每个server.X 指定唯一的仲裁和领导者选举端口(即上例中的2888:3888,2889:3889,2890:3890)配置文件。当然,单独的_dataDir_s和distinct _clientPort_s也是必需的(在上面复制的示例中,在单个localhost上运行,您仍然会有三个配置文件)。

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

其他优化

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

  • 要在更新时获得较低的延迟,请务必拥有专用的事务日志目录。默认情况下,事务日志与数据快照和myid文件放在同一目录中。dataLogDir参数指示用于事务日志的不同目录。
  • [tbd:其他配置参数是什么?]
  • 转载来源:

    https://github.com/apache/zookeeper/blob/master/zookeeper-docs/src/main/resources/markdown/zookeeperStarted.md

ZooKeeper入门指南相关推荐

  1. ZooKeeper官方文档学习笔记02-ZooKeeper入门指南

    本来以为学一篇都会很难很难,但是好像也没有那么难.虽然有些名词不太理解,但我决定后续学习中应该会遇到吧? 入门:使用ZooKeeper协调分布式应用程序 先决条件 下载 独立运行 1 选择一个合适的目 ...

  2. ZooKeeper管理员指南 部署和管理指南

    ZooKeeper管理员指南 部署和管理指南 PDF 部署 系统要求 支持的平台 必备软件 群集(多服务器)安装程序 单服务器和开发人员设置 管理 设计ZooKeeper部署 跨机器要求 单机要求 供 ...

  3. ZooKeeper管理员指南

    ZooKeeper管理员指南 部署和管理指南 部署 系统要求 支持的平台 必备软件 群集(多服务器)安装程序 单服务器和开发人员设置 管理 设计ZooKeeper部署 跨机器要求 单机要求 供应 需要 ...

  4. ZooKeeper:协调分布式系统入门指南

    ZooKeeper:协调分布式系统入门指南 ZooKeeper是一种用于分布式应用程序的高性能协调服务.它在一个简单的界面中公开了常用服务 - 例如命名,配置管理,同步和组服务 - 因此您不必从头开始 ...

  5. Microsoft Orleans 之 入门指南

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  6. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  7. Maven入门指南⑦:Maven的生命周期和插件

    Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...

  8. UE4风格化场景设计入门指南 Stylized Station – The Environment Artist’s Survival Kit

    持续时间13h 1920X1080 .ts 包含项目文件 大小解压后:4.9G 语言:英语+中文字幕(人工校对) 标题:风格化的车站--环境艺术家的生存工具包 信息: 环境艺术很难. 尤其是作为初学者 ...

  9. 游戏风格化角色创建入门指南视频教程

    游戏风格化角色创建入门指南视频教程 时间 33小时 包括项目文件 1920X1080 MP4 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 游戏中的风格化角色创建入门指南  百度一下 ...

最新文章

  1. 超实用的 Mybatis 3.5 新特性
  2. 【手把手教你树莓派3 (二)】 启动wifi模块
  3. RabbitMq 持久化(转)
  4. CV之 HOG特征描述算子-行人检测
  5. Apache 服务器配置详解
  6. mysql索引统计信息更新_MySQL索引统计信息更新相关的参数
  7. uni-app路由的封装
  8. MVC文件上传07-使用客户端jQuery-File-Upload插件和服务端Backload组件裁剪上传图片...
  9. 在 Google 工作是什么体验?
  10. C++实现NV12格式转BGR
  11. 【软件测试】软件测试的环境部署和安装教程[全]
  12. 在C#中用一个按钮控制斑马zebra条码打印机进行打印
  13. google服务框架 闪退_华为的谷歌服务打不开怎么办?
  14. 15-构造函数及原型
  15. 新人转行IC该怎么选择岗位?(内附各岗位学习视频)
  16. ubuntu-mysql的安装
  17. c语言scanf和printf区别,printf和scanf的区别是什么
  18. Beta阶段敏捷冲刺①
  19. 一、区块链项目的基础架构
  20. java基本数据类型长度

热门文章

  1. IRC 聊天工具(xchat,chatzilla,pidgin)入门教程
  2. 企业利用Pinterest平台推广9条建议
  3. Node.js入门 - 回调函数
  4. 应用程序挂起、复原与终止— IOS开发
  5. magento:getChildHtml() 与getChildChildHtml() 的用法,区别
  6. volatile深入
  7. 深度学习(数据集划分偏差方差)
  8. numpy+pandas+matplotlib绘制误差条形图
  9. Linux—JVM等性能调优监控
  10. 员工评价系统 winform