• 開始搭建第一个zookeeper


    首先须要下载zookeepertar包。地址为http://zookeeper.apache.org,然后再linux中解压并编译tar包。


    # tar-xvzf zookeeper-3.4.5.tar.gz


    假设你是使用的是window操作系统的话,须要找解压缩工具来解压上述jar包,而且须要配置JDKjava开发环境,要求JDK1.6以上


    在解压完的文件夹中。bin文件夹包括了一些命令的脚本,比如.sh结尾的是在linux中运行的脚本命令,.cmd结尾的是在window中运行的命令的脚本的信息。Lib文件夹中包括了java中须要的jar操作的类库文件


    第一个zookeeper会话


    以下在单机模式中创建zookeeper的回话。我们会利用zkServerzkCli的命令工具来完毕我们的操作。有经验的管理员也经常使用他们来调试和管理zookeeper


    进入到conf文件夹,又一次命名zoo_sample.cfg文件


    # mvconf/zoo_sample.cfg conf/zoo.cfg


    以下的操作是可选的。把zookeeper的数据存储文件夹与zookeeper安装文件夹隔离开来


    dataDir=/users/me/zookeeper


    最后来启动zookeeper服务


    # bin/zkServer.sh start
    JMX enabled by default
    Using config: ../conf/zoo.cfg
    Starting zookeeper ... STARTED
    #
    



    上面的命令终于会是zookeeper服务运行在后台,以下的命令会使zookeeper运行在前台程序中。而且从输出中我们也可以看到一些重要输出的信息。


    # bin/zkServer.shstart-foreground


    上述命令可以让我们看到很多其它的输出信息


    以下让我们来开启一个client


    #bin/zkCli.sh


    <some omitted output>
    2012-12-06 12:07:23,545 [myid:] - INFO  [main:ZooKeeper@438] -  
    Initiating client connection, connectString=localhost:2181
    sessionTimeout=30000 watcher=org.apache.zookeeper.
    ZooKeeperMain$MyWatcher@2c641e9a
    Welcome to ZooKeeper!
    2012-12-06 12:07:23,702 [myid:] - INFO  [main-SendThread  
    Getting Started with ZooKeeper  |  27(localhost:2181):ClientCnxn$SendThread@966] - Opening
    socket connection to server localhost/127.0.0.1:2181.
    Will not attempt to authenticate using SASL (Unable to
    locate a login configuration)
    JLine support is enabled
    2012-12-06 12:07:23,717 [myid:] - INFO  [main-SendThread  
    (localhost:2181):ClientCnxn$SendThread@849] - Socket
    connection established to localhost/127.0.0.1:2181, initiating
    session [zk: localhost:2181(CONNECTING) 0]
    2012-12-06 12:07:23,987 [myid:] - INFO  [main-SendThread  
    (localhost:2181):ClientCnxn$SendThread@1207] - Session
    establishment complete on server localhost/127.0.0.1:2181,
    sessionid = 0x13b6fe376cd0000, negotiated timeout = 30000
    WATCHER::
    WatchedEvent state:SyncConnected type:None path:null
    



    上面的运行过程为

    1.      client開始建立一个回话

    2.      client尝试连接127.0.0.1:2181

    3.      client连接成功,服务端開始初始化回话状态

    4.      回话状态初始化成功

    5.      服务端发功一个同步的事件给client


    以下来让我们运行一些命令操作,来玩一下zookeeper


    [zk: localhost:2181(CONNECTED) 0]

    [zk: localhost:2181(CONNECTED) 0] ls /

    [zookeeper]

    [zk: localhost:2181(CONNECTED) 1] create/workers ""

    Created /workers

    [zk: localhost:2181(CONNECTED) 2] ls /

    [workers, zookeeper]

    [zk: localhost:2181(CONNECTED) 3]

     

    [zk: localhost:2181(CONNECTED) 3] delete/workers

    [zk: localhost:2181(CONNECTED) 4] ls /

    [zookeeper]

    [zk: localhost:2181(CONNECTED) 5] quit

    Quitting...

    2012-12-06 12:28:18,200 [myid:] - INFO  [main-EventThread:ClientCnxn$

    EventThread@509] - EventThread shut down

    2012-12-06 12:28:18,200 [myid:] - INFO  [main:ZooKeeper@684] - Session:

    0x13b6fe376cd0000 closed

    # bin/zkServer.sh stop

    JMX enabled by default

    Using config: ../conf/zoo.cfg

    Stopping zookeeper ... STOPPED

    #


    会话的声明周期

    回话的声明周期贯穿它的起始与结束,整个声明周期状态。例如以下图所看到的



    Zookeeper集群模式

    上面仅仅是一个独立的模式,以下来搭建一个集群的模式。还是一个一个主机为例,在一个主机上搭建三个不同的zookeeper服务。为了实现集群模式操作。

    參考一下文章:http://www.tuicool.com/articles/iMjMvm

     

    Zookeeper中的锁


    在zookeeper中有多种不同类型的锁。比方读写锁,全局锁等。

    而且有非常多方式去实现zookeeper中的锁,以下我们将讨论一种最简单的,去说明应用中是怎样来利用zookeeper的。


    试想。我们有一个应用,而且该应用中有n个进程都在尽力的争取锁,考虑到zookeeper不是直接的暴漏它的语法,因此我们须要用zookeeper的接口去操作节点和实现锁的机制。为了获取锁,每一个进程都尽力的去创建节点,假设获得了锁,就会创建成功。这样的情况下,一种潜在的问题是,p进程假设死掉了,可是并没有释放锁的话。那么其它进程将没有机会获得到锁。此时系统将处于一种死锁的状态,为了避免这样的情况,因此我们须要创建暂时节点。


    仅仅要该节点存在,那么其它的进程将会创建失败。那么其它进程将会监视该节点,一点该节点删除掉。那么他们就有机会获取到锁。




  • 相关阅读:
    Apriori算法原理总结
    FP Tree算法原理总结
    用Spark学习FP Tree算法和PrefixSpan算法
    《万历十五年》段落摘抄
    DPDK mempool
    DPDK PCIe 与 包处理
    《汇编语言》-- 控制执行流程
    《黑客攻防技术-系统实战》第二章--栈溢出4
    DPDK报文转发
    DPDK同步互斥机制
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7090295.html
Copyright © 2020-2023  润新知