zoukankan      html  css  js  c++  java
  • Zookeeper搭建集群及协同

    Zookeeper搭建集群及协同

    协同的实现

    首先启动一个zkCli客户端(zkCLi-1),创建一个workers节点。

    create /workers

    使用ls监控当前节点。

    ls -w /workers
    []

    当前/workers中没有子节点。

    新开一个zkCli客户端(zkCli-2),在/workers中创建一个新节点。

    create -e /workers/w1 "w1:2220"

    此时zkCli-1中收到通知。

    WATCHER::
    
    WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/workers
    

    使用ls在zkCli-1中查看节点信息。

    ls -w /workers

    返回

    [w1]

    此时在zkCli-2中执行quit退出。

    zkCli-1中再次用ls查看。

    []

    这样一个简单的协同服务就已经实现了。

    集群搭建

    在我们上一篇说的什么是挖矿?一文中,最后留下了一个问题,DPoS算法,这个类似于选举的算法。

    Zookeeper集群中,也是使用了一种类似的选举算法,感兴趣的可以去了解一下Paxos算法的论文。

    http://lamport.azurewebsites.net/pubs/paxos-simple.pdf

    在Zookeeper集群中被选举出来的节点叫做leader,其他节点叫做follow。

    为了方便演示,我将我本地的Zookeeper拷贝为了三份,不过记得修改它们三份中的配置文件。

    需要修改的是dataDir的路径以及端口号。

    服务器0中zoo.cfg

    //修改部分
    dataDir=/tmp/zookeeper/data0
    clientPort=2190
    //新增部分(三份cfg均相同)
    server.0=127.0.0.1:3333:3334
    server.1=127.0.0.1:4444:4445
    server.2=127.0.0.1:5555:5556
    

    服务器1中zoo.cfg

    //修改部分
    dataDir=/tmp/zookeeper/data1
    clientPort=2191
    //新增部分(三份cfg均相同)
    server.0=127.0.0.1:3333:3334
    server.1=127.0.0.1:4444:4445
    server.2=127.0.0.1:5555:5556
    

    服务器2中zoo.cfg

    //修改部分
    dataDir=/tmp/zookeeper/data2
    clientPort=2192
    //新增部分(三份cfg均相同)
    server.0=127.0.0.1:3333:3334
    server.1=127.0.0.1:4444:4445
    server.2=127.0.0.1:5555:5556
    

    分别启动三个Zookeeper服务端。

    zookeeper

    可以看到已经自动选出了一个Leader节点。

    此时我们启动一个zkCli来使用这个三节点集群。

    ./zkCli.sh -server 127.0.0.1:2190,127.0.0.1:2191,127.0.0.1:2192

    zookeeper

    可以看到zkCli已经连接到port为2191的节点,也就是服务器1(一个Follower节点)。

    现在我们关闭服务器1。

    zookeeper

  • 相关阅读:
    bat 处理adb脚本
    作用域,高阶函数
    常用内置函数-6
    习题元祖与字典的值交换
    函数的参数
    序列类型与非序列类型
    格式化输出,深浅复制
    可变,不可变与 id 的关系
    linux-shell系列6-rundeck生成host文件
    linux-shell系列5-统计
  • 原文地址:https://www.cnblogs.com/LexMoon/p/zookeeper01.html
Copyright © 2011-2022 走看看