• ZooKeeper入门(四)


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

    这个文档使你对ZooKeeper快速入门,它主要针对想尝试它的开发者。并且包含简单的单机的ZooKeeper服务的安装说明,一些验证是否运行的命令,和一个简单的编程例子。最后,为了方便起见,有几部分关于更复杂的安装,例如运行复制的部署,优化事务日志,然而为了商业部署的完整手册,请参考ZooKeeper Administrator's Guide

    Pre-requisites

    参考管理手册中的 System Requirements。

    下载

    想要获得ZooKeeper的分发。从Apache的下载镜像中下载一个最近的稳定版本。

    单机操作

    以单机的模型安装ZooKeeper服务是相当直接的。服务器包含一个单独的JAR包,所以安装过程包含创建一个配置文件。一旦你下载了一个ZooKeeper的稳定发行版本。解压它然后进入到它的根目录。

    为了启动ZooKeeper你需要一个配置文件,这里有一个例子,在conf/zoo.cfg中创建它。

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

    这个文件可以被叫作任何名字。但是为了这个讨论叫它conf/zoo.cfg。改变dataDir的值使它指向一个存在(一开始为空)的目录,下面是每一个字段的含义。

    tickTimeZooKeeper使用的最基本的毫秒时间单位,它被用来做心跳并且会话失效的最小时间是两倍的tickTime。

    dataDir存储内存数据库快照的地址,并且除非另外指定,也是数据库的更新的事务日志的地址。

    clientPort监听客户端连接的端口

    现在你已经创建了一个配置文件,你可以用下面的命令启动ZooKeeper。

    bin/zkServer.sh start
    

     ZooKeeper使用log4j来记录日志消息,更详细的内容可以在开发者的指导手册中的Logging部分获得。你可以看到日志打印到控制台(默认的)和/或根据log4j的配置的日志文件中。

    这里列出的是以单机模式运行ZooKeeper的大纲。这里没有复制,所以如果ZooKeeper进程失败,服务将会停止。这对大部分的开发情况是ok的。但是想要以复制模式运行ZooKeeper,请参考Running Replicated ZooKeeper

    管理ZooKeeper存储

    对于一个长时间运行的生产环境系统,ZooKeeper存储必须在外部被管理(dataDir and logs)。参考maintenance部分来获取更多信息。

    链接ZooKeeper

    一旦ZooKeeper正在运行。你有几个选项来链接它:

    • Java 使用
    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,生成如下结果:

    [zkshell: 8] ls /
    [zookeeper]

    下一步,创建一个节点通过运行create /zk_test my_data。这创建一个新的znode并且给这个节点关联一个string "my_data"。你可以看到:

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

    发起另一个ls / 命令来查看目录看起来像什么:

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

    注意zk_test目录已经被创建。

    下一步,通过运行get命令检查跟这个节点关联的数据,例如:

    [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命令,例如:

    [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操作在set操作之后,并且它确实改变了。

    最后,让我们删除这个节点通过:

    [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。

    运行可复制的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服务器连接领导者的超时时间。syncLimit限制了一个服务器从一个领导者的过期时间。有了这两个超时时间,你用tickTime来指定时间单位。在这个例子中,initLimit的超时时间是5个ticks,每个ticks是2000毫秒,或者10秒。

    server.X这样形式的条目列出了组成ZooKeeper服务的服务器。当服务启动的时候,通过搜寻数据目录下的myid文件它知道是那一台服务器。这个文件以ASCII格式包含服务器数字。

    最后,注意每一个服务器名字后面的两个端口号:“2888”和“3888”。服务中的节点前一个端口去链接其它的节点。这个的连接是必需的,所以节点之间可以相互通信,例如,同意更新的顺序。更具体地说,ZooKeeper用这个端口来连接追随者和领导者。当一个领导者被选举出来,一个追随者打开一个TCP连接用这个端口。因为默认的领导者选举也用TCP,我们现在需要另一个端口用来领导者选举,这就是server条目中的第二个端口。

    注意:

    如果你想在同一台机器上测试多个服务器,用localhost指定服务名和唯一的法定人数和领导者选举端口(也就是说.2888:3888,2889:3889,2890:3890)用于每一个server.X在服务器的配置文件中。当然独立的DataDires和不同clientPorts 也是必需的(在上面的复制例子,运行在单独的一个机器,你也需要三个配置文件)。

    请注意在一个机器上安装多个ZooKeeper服务节点将不会创建任何冗余。如果有什么导致这个机器挂掉的事件发生,所有的ZooKeeper节点将会掉线。为了冗余需要每一个节点拥有它自己的机器。它必需是完成独立的物理机器。同一个物理主机的多个

    虚拟机器对这个主机的失败也是脆弱的。

    其它的优化

    有其它几个配置参数可能大大地提高性能:

    • 为了更新里有低的延迟,有一个特定的事务日志目录是重要的。默认情况下事务日志被放在和数据快照和myid文件相同的目录。dataLogDir参数为事务日志指明了一个不同的目录。
    • [tbd:其它配置参数呢]

      插播个广告 


    老丈人家的粉皮儿,农产品,没有乱七八糟的添加剂,欢迎惠顾
     
  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/dupang/p/5639021.html
Copyright © 2020-2023  润新知