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

目录:

  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 才依然可用。

zookeeper 集群环境搭建及集群选举及数据同步机制的更多相关文章

  1. Spark集群环境搭建——Hadoop集群环境搭建

    Spark其实是Hadoop生态圈的一部分,需要用到Hadoop的HDFS.YARN等组件. 为了方便我们的使用,Spark官方已经为我们将Hadoop与scala组件集成到spark里的安装包,解压 ...

  2. redis 集群环境搭建-redis集群管理

    集群架构 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redi ...

  3. HBase —— 集群环境搭建

    一.集群规划 这里搭建一个3节点的HBase集群,其中三台主机上均为Regin Server.同时为了保证高可用,除了在hadoop001上部署主Master服务外,还在hadoop002上部署备用的 ...

  4. Spark集群环境搭建——部署Spark集群

    在前面我们已经准备了三台服务器,并做好初始化,配置好jdk与免密登录等.并且已经安装好了hadoop集群. 如果还没有配置好的,参考我前面两篇博客: Spark集群环境搭建--服务器环境初始化:htt ...

  5. hadoop集群环境搭建之zookeeper集群的安装部署

    关于hadoop集群搭建有一些准备工作要做,具体请参照hadoop集群环境搭建准备工作 (我成功的按照这个步骤部署成功了,经实际验证,该方法可行) 一.安装zookeeper 1 将zookeeper ...

  6. [转]ZooKeeper 集群环境搭建 (本机3个节点)

    ZooKeeper 集群环境搭建 (本机3个节点) 是一个简单的分布式同步数据库(或者是小文件系统) ------------------------------------------------- ...

  7. zookeeper集群环境搭建详细图文教程

    zookeeper集群环境搭建详细图文教程 zhoubang @ 2018-01-02 [文档大纲] 友情介绍 软件环境 注意点 环境安装 1. 新建用于存储安装包以及软件安装的目录 2. 下载安装z ...

  8. ZooKeeper 完全分布式集群环境搭建

    1. 搭建前准备 示例共三台主机,主机IP映射信息如下: 192.168.32.101 s1 192.168.32.102 s2 192.168.32.103 s3 2.下载ZooKeeper, 以  ...

  9. Linux环境下ZooKeeper集群环境搭建关键步骤

    ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...

  10. ZooKeeper伪集群环境搭建

    1.从官网下载程序包. 2.解压. [dev@localhost software]$ tar xzvf zookeeper-3.4.6.tar.gz 3.进入zookeeper文件夹后创建data文 ...

随机推荐

  1. MybatisPlus实现高效的多对多查询

    1.前置 事先声明一下代码中蕴含了大量的Stream和Lambda表达式操作,还不清楚的小伙伴可以去参考一下Java8新特性Stream流,而却我是用的是MybatisPlus这方面不清楚的也可以参考 ...

  2. hszxoj ATM [tarjan]

    hszxoj ATM 题目描述:\(Siruseri\) 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 \(Siruseri\) 银行的 \(ATM\) 取款机 ...

  3. 华企盾DSC服务器无法启动常见处理方法

    先查看<服务问题判断>文档.常见的 1.授权已经过期--需延长授权 2.ERR_BASE64 – 机器码变更 3.不能在该计算机上使用该数据库,需要解锁才可以--打开服务器配置解锁数据库 ...

  4. 调试分析Linux 0.00引导程序

    Bochs虚拟机的配置文件 简介 Bochs 虚拟机的配置文件 描述待启动的虚拟机的配置,例如内存大小.启动镜像.网络功能.存储配置. Bochs运行后,会先查找配置文件,解析模拟器要虚拟的系统相关信 ...

  5. 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(三)

    前言 今天的第三篇,感觉没啥人看呀,难道没有兄弟跟我有同样的整合需求吗???手动 , 本文会简短一些,介绍下 CastleCore 作为代理库的一些缺点甚至是硬伤 异步支持 先上代码 /// < ...

  6. 2023-05-19:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。 沿途有加油站,每个 station[i] 代表一个加油站, 它位于出发位置东面 station[i][

    2023-05-19:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处. 沿途有加油站,每个 station[i] 代表一个加油站, 它位于出发位置东面 station[i][ ...

  7. 16、Flutter Wrap组件 实现流布局

    Wrap可以实现流布局,单行的Wrap跟Row表现几乎一致,单列的Wrap则跟Column表现几乎一致.但 Row与Column都是单行单列的,Wrap则突破了这个限制,mainAxis上空间不足时, ...

  8. 在xml中比较运算符

    SQL 中,可以使用比较运算符来比较两个值,如使用小于运算符 < 比较两个值大小.但是,在 SQL 查询中,有时候需要将小于运算符 < 用于 XML 或 HTML 语法中,这会导致语法冲突 ...

  9. 618大促,电商企业如何拔得头筹,“敏捷+ DevOps”有话说

    前言 当今企业发展不再以大为目标,而更多追求强和快,因为只有后者才能适应时代变化让企业处以不败之地,我们称这个时代为快鱼吃大鱼的时代,追求快和强也是企业的新形态. 传统行业小到菜场经济,大到航空航天, ...

  10. 如何使用GaussDB(DWS)的本地临时表进行数据处理

    本文分享自华为云社区<GaussDB(DWS)临时表系列 - 本地临时表>,作者: acydy . GaussDB(DWS) 从8.2.1版本后支持三种形式的临时表:本地临时表.Volat ...