zoukankan      html  css  js  c++  java
  • zookeeper 集群环境搭建及集群选举及数据同步机制

    本文为博主原创,未经允许不得转载:

    目录:

      1. 分别创建3个data目录用于存储各节点数据

      2. 编写myid文件

      3. 编写配置文件

         4.分别启动

      5.分别查看状态

      6. 检查集群复制情况:

      7. 集群角色说明

         8. 选举机制

      9. 数据同步机制

      

      1. 在dataDir配置的目录下分别创建3个data目录用于存储各节点数据

    mkdir data
    mkdir data/1
    mkdir data/2
    mkdir data/3

      2. 编写myid文件

        myid的值是zoo.cfg文件里定义的server.A项A的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较

      从而判断到底是那个server,只是一个标识作用。

    echo 1 > data/1/myid
    echo 3 > data/3/myid
    echo 2 > data/2/myid

      3、编写配置文件

        配置语法:  server.<节点ID>=<ip>:<数据同步端口>:<选举端口>

           节点ID:服务id手动指定1至125之间的数字,并写到对应服务节点的 {dataDir}/myid 文件中。

           IP地址:节点的远程IP地址,可以相同。但生产环境就不能这么做了,因为在同一台机器就无法达到容错的目的。所以这种称作为伪集群。

           数据同步端口:主从同时数据复制端口,(做伪集群时端口号不能重复)。

           远举端口:主从节点选举端口,(做伪集群时端口号不能重复)。

        通过在 zookeeper 每个节点配置所有的上述配置,实现集群环境配置。 以下为伪集群中配置的集群配置

    #集群配置
    server.1=127.0.0.1:2887:3887
    server.2=127.0.0.1:2888:3888
    server.3=127.0.0.1:2889:3889

      conf/zoo1.cfg

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/tmp/zookeeper/data/1
    clientPort=2181
    #集群配置
    server.1=127.0.0.1:2887:3887
    server.2=127.0.0.1:2888:3888
    server.3=127.0.0.1:2889:3889

      conf/zoo2.cfg

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/tmp/zookeeper/data/2
    clientPort=2182
    #集群配置
    server.1=127.0.0.1:2887:3887
    server.2=127.0.0.1:2888:3888
    server.3=127.0.0.1:2889:3889

      conf/zoo3.cfg

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/tmp/zookeeper/data/3
    clientPort=2183
    #集群配置
    server.1=127.0.0.1:2887:3887
    server.2=127.0.0.1:2888:3888
    server.3=127.0.0.1:2889:3889

      4.分别启动

    ./bin/zkServer.sh start conf/zoo1.cfg
    ./bin/zkServer.sh start conf/zoo2.cfg
    ./bin/zkServer.sh start conf/zoo3.cfg

      

      5.分别查看状态

    ./bin/zkServer.sh status conf/zoo1.cfg
    Mode: follower
    ./bin/zkServer.sh status conf/zoo2.cfg
    Mode: leader
    ./bin/zkServer.sh status conf/zoo3.cfg
    Mode: follower

      

      6. 检查集群复制情况:

      分别连接指定节点,zkCli.sh 后加参数-server 表示连接指定IP与端口

    ./bin/zkCli.sh -server 127.0.0.1:2181
    ./bin/zkCli.sh -server 127.0.0.1:2182
    ./bin/zkCli.sh -server 127.0.0.1:2183

      任意节点中创建数据,查看其它节点已经同步成功。

       -server参数后同时连接多个服务节点,并用逗号隔开 127.0.0.1:2181,127.0.0.1:2182

     

       7. 集群角色说明

         zookeeper 集群中总共有三种角色,分别是leader(主节点)follower(子节点) observer(次级子节点)

    角色

    描述

    leader

    主节点,又名领导者。用于写入数据,通过选举产生,如果宕机将会选举新的主节点。

    follower

    子节点,又名追随者。用于实现数据的读取。同时他也是主节点的备选节点,并用拥有投票权。

    observer

    次级子节点,又名观察者。用于读取数据,与fllower区别在于没有投票权,不能选为主节点。并且在计算集群可用状态时不会将observer计算入内。

          observer配置:

            只要在集群配置中加上observer后缀即可,示例:server.3=127.0.0.1:2889:3889:observer

       8. 选举机制

            投票机制说明:

              第一轮投票全部投给自己

              第二轮投票给myid比自己大的相邻节点

              如果得票超过半数,选举结束。

            选举触发:

              当集群中的服务器出现已下两种情况时会进行Leader的选举

                1.服务节点初始化启动

                2.半数以上的节点无法和Leader建立连接

      9. 数据同步机制

            zookeeper 的数据同步是为了保证各节点中数据的一至性,同步时涉及两个流程,

          一个是正常的客户端数据提交,另一个是集群某个节点宕机在恢复后的数据同步

        9.1 客户端写入流程说明:

      1. client向zk中的server发送写请求,如果该server不是leader,则会将该写请求转发给leader server,leader将请求事务以proposal形式分发给follower;
      2. follower收到收到leader的proposal时,根据接收的先后顺序处理proposal;
      3. Leader收到follower针对某个proposal过半的ack后,则发起事务提交,重新发起一个commit的proposal
      4. Follower收到commit的proposal后,记录事务提交,并把数据更新到内存数据库;
      5. 当写成功后,反馈给client。

         9.2 服务节点初始化同步:

               在集群运行过程当中如果有一个follower节点宕机,由于宕机节点没过半,集群仍然能正常服务。当leader 收到新的客户端请求,此时无法同步给宕机的节点。造成                        数据不一至。为了解决这个问题,当节点启动时,第一件事情就是找当前的Leader,比对数据是否一至。不一至则开始同步,同步完成之后在进行对外提供服务。如何比                      对Leader的数据版本呢,通过ZXID事物ID来确认。比Leader就需要同步。

      10. 集群的半数机制

          ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooKeeper 服务器个数大于宕掉的个数的话整个 ZooKeeper 才依然可用。

     

     

     

  • 相关阅读:
    丘先生为世界华裔数学家大会(北京 1998)而作
    获取IFC构件的位置数据、方向数据
    TeslaManage运行日志 (201910-201911)
    IFC构件位置数据与revit模型中对应构件位置数据对比
    IFC构件位置信息—ObjectPlacement
    jsoup爬取某网站安全数据
    Java统计文件数量
    osg 渲染ifc数据-测试
    编译日志—20191101
    Tekla 导出ifc并浏览
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/15046909.html
Copyright © 2011-2022 走看看