zookeeper 入门指南(译)

来源:互联网 发布:文明5ige编辑器 Linux 编辑:程序博客网 时间:2024/06/04 00:57

zookeeper 入门指南

原文地址: http://zookeeper.apache.org/doc/r3.4.8/zookeeperStarted.html

使用zookeeper进行分布式协调应用程序

本文介绍zookeeper快速入门. 本文主要为那些希望尝试zookeeper研发人员,介绍简单的安装, 少许验证zookeeper状态的指令, 和一些编程实例. 最后顺便介绍少许的集群的安装部署和事务日志的优化. 如果想要在商业环境上使用zookeeper, 可以查看zookeeper 管理员指导手册.

准备工作

在管理员指导页面查看 System Requirements

下载

如果想获取具有分布式特性zookeeper,建议从Apache下载一个最新稳定版版本

单机操作

将zookeeper安装在一台机器上非常简单. zookeeper被打包在一个简单的JAR文件中, 所以安装需要创建一个配置文件.

下载了稳定版的zookeeper后, 解压, 并进入解压文件的根目录中

由于启动zookeeper 需要一个配置文件. 在这里介绍一个实例: 创建conf/zoo.cfg:

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

这个文件可以叫任意名字, 为了演示这里命名为conf/zoo.cfg. 将dataDir的值指定到一个空的文件夹中. 详细字段含义如下:

  • tickTime
    单位是毫秒, 用于心跳,配置最小session超时时间.
  • dataDir
    dataDir用于存储内存级数据库的镜像, 除非特别配置,否则事务日志也将更新到数据库中
  • clientPort
    监听client连接的端口

现在已经创建了配置文件, 启动zookeeper

bin/zkServer.sh start

zookeeper的日志管理使用的是log4j – 更过的详细配置可以再研发指导中日志篇查看. 你可以在控制台或者配置log4j配置来查看日志信息.

启动zookeeper单机模式已讲到这里. 由于没有集群, 所以如果zookeeper处理出现问题, 服务就会停止. 对于开发中单机版是够用的, 但如果要运行集群模式下面将会介绍.

存储管理

如果要在生产环境上长期运行zookeeper, dataDir和logs 就比较进行管理. 详细内容将在maintenace介绍.

zookeeper连接

连接zookeeper 需要几个服务选项:

  • Java:
bin/zkCli.sh -server 127.0.0.1:2181
  • C: 通过make cli_mt 或者make cli_st编译

    运行可以使用

LD_LIBRARY_PATH=. cli_mt 127.0.0.1:2181

或者是

LD_LIBRARY_PATH=. cli_st 127.0.0.1:2181

一旦连接上zookeeper , 可以看到类似这样的信息:

Connecting to localhost:2181log4j: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]

使用help指令可以列举出所有客户端的操作指令

[zkshell: 0] helpZooKeeper 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]

接下来,创建一个新节点zk_test,并赋值内容为my_data create /zk_test my_data .

[zkshell: 9] create /zk_test my_dataCreated /zk_test

再次,输入ls / 查看目录结构

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

注意现在zk_test目录已经创建成功.

如果要查看节点内容的数据,可以使用get指令

[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 命令改变节点的数据内容

[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_testjunkcZxid = 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

最后我们使用delete 删除一个节点

[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
  • 集群

对于大多数开发,测试,和技术选项过成功使用单机版zookepper是非常方便的. 但是在生产环境中, 应该使用集群模式. 集群由一组相同的叫做quorum应用服务器组成; 在集群模式下,所有的服务器都具有相同配置文件.

注: 在集群模式下,三台服务器是集群的最少数量, zookeeper 强力建议使用奇数个服务器. 如果你只使用了两天服务器, 如果一个发生故障,它们就无法形成一个大部分仲裁的形式. 两台服务器的形式要比一台服务器更不稳定,因为它们具有两个单点故障.

在集群模式下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使用它限制仲裁服务器连接leader的时间(5 * tickTime = 10秒).

syncLimit 是仲裁服务器与leader服务器断开时间的大小(2 * tickTime = 4秒).

这两个超时时间的单位都是tickTime

server.x列表构成了zookeeper的服务. 当服务器启动时候,它通过数据目录下的myid文件 知道自己是哪一个server. 文件中记录有服务器的ASCII数值.

最后, 注意server名称后面两个数值端口:”2888”和”3888”. 每个服务器都使用前一个端口去连接其他服务器. 这样一个连接是必须的, 只有这样所有的服务器才可以进行通信, 例如: 根据顺序更新操作进行响应. 具体来说, 一个zookeeper服务器使用这个端口连接followers到leader. 当一个新的leader出现时候, follower将开启TCP连接到leader,就使用这个端口. 由于默认leader选举的时候也需要使用TCP,我们当前需要另外一个端口用于leader选举. 这个端口就是后面的端口.

注意: 如果你想在单机上测试多服务器操作, 在每个server.x配置文件,指定服务器名称为唯一冲裁编号和leader选举端口(例如: 2888:3888, 2889:3889, 2890:3890). 当然分隔dataDirs和区分clientPort是必须的.

要知道在单物理机上设置多个服务程序,这样并不能做出冗余. 如果发生机器宕机, 所有的zookeeper服务都将下线. 冗余备份需要每个服务器都有自己的物理机.

0 0
原创粉丝点击