二. zookeeper集群与选举机制

二. zookeeper集群与选举机制

2.1:ZooKeeper集群三种角色

一.分类

  1. leader:作为整个zk集群写请求的唯一处理者,并负责进行投票的发起和决议,更新系统的状态。
  2. follower:接收客户端请求,处理读请求,并向客户端返回结果;将写请求转给 Leader;在选举 Leader过程中参与投票。
  3. observer:可以理解为无选举投票权的 Flollower,其主要是为了协助 Follower 处理更多的读请求。如果Zookeeper 集群的读请求负载很高,或者客户端非常非常多,多到跨机房,则可以设置一些 Observer服务器,以提高读取的吞吐量。

二.图示

三种角色图示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9TZfXtt-1574402605152)(en-resource://database/3172:1)]

observer作用:
在这里插入图片描述

2.2:ZooKeeper集群三种模式

一.分类

  1. 恢复模式: 如果leader崩溃,这个时候就会进入恢复模式,使整个zk集群恢复到正常的工作状态
  2. 同步模式:新的leader选举出来后,就会进入同步模式(各个follower会去同步新的leader上的数据),当大多数zkServer完成了与leader的状态同步之后,恢复模式就结束
  3. 广播模式:客户端想写入数据,这个时候leader发起提议,当leader的提议被大多数的zkServer统一之后,leader就会去修改自身的数据,并将修改后的数据广播给其他的follower

二.图示

在这里插入图片描述

2.3:ZooKeeper集群选举

一.myid与zxid

  1. myid:这是 zk 集群中服务器的唯一标识,称为 myid。
    1. 例如,有三个 zk 服务器,那么编号分别是 1,2,3。
  2. zxid:
    1. zxid 为 Long 类型,其中高 32 位表示 epoch,低 32 位表示 xid。
    2. 组成:
      1. epoch: 每个 Leader 都会具有一个不同的 epoch 值,表示一个时期、时代。新的 Leader 产生,则会更新所有zkServer 的 zxid 中的 epoch
      2. xid: zk 的事务 id,每一个写操作都是一个事务,都会有一个xid。每一个写操作都需要由 Leader 发起一个提议,由所有 Follower 表决是否同意本次写操作。
  • zxid原理:

类似ReentranReadWriteLock 32位

高位 低位
0000000000000000 0000000000000000

zxid 是64位

epoch xid
00000000000000000000000000000000 00000000000000000000000000000000

二. 逻辑时钟

逻辑时钟,Logicalclock:是一个整型数,该概念在选举时称为 logicalclock,而在 zxid 中则为 epoch 的值。即 epoch 与 logicalclock 是同一个值,在不同情况下的不同名称。

三. zk的选举状态

  1. 分类
    1. LOOKING,选举状态(查找 Leader 的状态)。
    2. LEADING,领导者状态。处于该状态的服务器称为 Leader
    3. FOLLOWING,随从状态,同步 leader 状态。处于该状态的服务器称为 Follower。
    4. OBSERVING,观察状态,同步 leader 状态。处于该状态的服务器称为 Observer。
  2. 图示
    在这里插入图片描述

2.4:ZooKeeper集群选举发生的时机与选举算法

一.简介

  1. 发生时机:整个集群群龙无首的时候
    1. 服务启动
    2. leader宕机之后
  2. 选举机制:集群中,半数zkServer同意,则产生新的leader
    1. 注意:搭建集群时,一般都是奇数个。例:三台服务器,最多允许一台宕机,四台服务器,也是最多允许一台宕机
  3. 选举算法:对比(myid,zxid)
    1. 先对比zxid,zxid大者(大表示数据越新)胜出,成为leader
    2. 如果zxid一致,则myid大者成为leader

二.图示

在这里插入图片描述

2.5:ZooKeeper集群搭建

一.简介

  1. 端口的作用(默认配置下)
    1. 2181: 对client端提供服务
    2. 2888: 集群内及其通讯使用的端口
    3. 3888: 集群选举leader

二.集群步骤(3台)

  1. 修改zk配置
    1. 编辑zk的conf目录下的zoo.cfg:
      1. dataDir=/usr/local/zookeeper-3.4.12/data
      2. 三台分别修改zoo.cfg:
        1. server.1=xdclass1:2888:3888
        2. server.2=xdclass2:2888:3888
        3. server.3=xdclass3:2888:3888
    2. 在zk的根目录下,新建一个data目录,并在data目录下新增一个myid的文件
  2. 配置权限:
    1. 三台服务器,分别新增一个叫做zookeeper的用户 useradd zookeeper
    2. 将修改好配置的zk,分别放到三台服务器的/usr/local/,并将目录权限改为zookeeper用户chown -R zookeeper:zookeeper zookeeper-3.4.12/
  3. 修改myid文件: 三台服务器,均修改/usr/local/zookeeper-3.4.12/data/目录里的myid文件,文件内容是一个数字,对应server.1=xdclass1 里的1
  4. 关闭防火墙systemctl stop firewalld.service
  5. 清理cmd文件,并使sh文件具有可执行权限:
    1. 进入zk的bin目录运行下面命令
rm -rf *.cmd
chmod +x *.sh
  1. 启动并观察状态:
    1. 从第一台机子依次启动 ./zkServer.sh start
    2. 三台机子均启动完成之后,可以使用zkServer.sh status去查看状态
  • leader的机器状态
    在这里插入图片描述

  • follower的机器的状态
    在这里插入图片描述

    扫描二维码关注公众号,回复: 10880749 查看本文章
发布了96 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq919694688/article/details/103199730