微服务:5-zookeeper 选举机制

1 zk集群核心之三种角色

  • leader 整个集群zk写请求的唯一处理者,并负责进行投票的发起和决议,更新系统状态

  • follower 接收客户端请求,处理读请求,并向客户端返回结果;将写请求转给Leader;在选举Leader过程参与投票

  • observer 无选举投票权的follower,主要协助follower处理更多的读请求

    • 如果集群的读请求负载很高,或者客户端非常多,多到跨机房,则可以设置一些Observer服务器,以提高读取的吞吐量

2 zk注册中心常见的三种模式

  • zk的核心是广播机制,保证各个zk之间数据同步,zk实现的机制为ZAB协议

  • 恢复模式: 如果Leader崩溃,这个时候就会进入恢复模式,使整个zk集群恢复到正常的工作状态

  • 同步模式: 新的Leader选举出来后,就进入同步模式(各个follower会去同步新的Leader上的数据),当大多数zkServer完成了与Leader状态同步后,恢复模式就结束

  • 广播模式:客户端想写入数据,整个时候Leader发起提议,当Leader的提议被大多数的zkServer统一之后,Leader就会去修改自身的数据,并将修改后的数据广播给
    其他的follower

3 zk集群选举核心概念及选举时状态

  • myid

    服务器唯一标识,如有三个zk服务器,编号分别: 1,2,3

  • zxid

    ReentranReaderWriteLock 32位
    在这里插入图片描述

    • zxid位long类型,高32位epoch,低32位表示xid,即zxid由两部分构成

    • 每个Leader都会具有个不同的epoch值,表示一个时期、时代。新的Leader产生,则会更新所有
      的zkServer的zxid中的epoch。

    • 而xid为zk的事务id,每个写操作都是一个事务,都会有个xid。

    • 每个写操作都需要由Leader发起一个提议,由所有Follower表决是否同意本次写操作

  • 逻辑时钟

    一个整型数,在选举时成为logical lock。在zxid中则为epoch值。
    epoch与logical lock是同一个值,在不同情况下的不同名称。

  • zk的选举状态

    LOOKING: 选举状态(查找Leader的状态)
    LEADING: 领导者状态,处于该状态的服务器称为Leader
    FOLLOWING: 随从状态,同步leader状态,处于该状态的服务器称为Flollower
    OBSERVING: 观察状态,同步leader状态,处于该状态的服务器称为Observer

4 zk集群选举发生的时机和选举算法

  • 发生时机: 整个集群群龙无首的时候

    • 服务启动
    • leader宕机之后
  • 选举机制

    • 集群中,半数zkServer同意,则产生新的leader
    • 搭建集群时,一般是奇数个,半数以上同意产生leader
      三台服务器,最多允许一台宕机
      四台服务器,也是最多允许一台宕机
  • 选举算法

    • 对比(myid,zxid),先对比zxid,zxid大(数据越新)胜出,成为leader
    • 如果zxid一致,则myid大者成为leader

    如:

    服务启动:有三台myid = 1,2,3

      myid=1 启动后,给自己投票,发布投票结果(myid,zxid)
      myid=2 启动,同样给自己投票,跟第一台比较,zxid一样,则比较myid,谁大,谁胜出
    

    宕机时

      若leader宕机,此时活着的server将会修改状态为looking
      哪个服务的zxid比较大,则胜出leader
    

5 集群搭建

  • 端口作用

    • 2181 对client端提供服务
    • 2888 集群及其通信使用的端口
    • 3888 集群选举leader
  • 修改zk配置

    • 编辑zk下conf目录下zoo.cfg
      修改
      dataDir = /opt/apache-zookeeper-3.6.2-bin/data
      添加
      server.1=slave1:2888:3888
      server.2=slave2:2888:3888

    • 给集权服务器,分别新增用户
      useradd = zookeeper

    • 在zk下的data目录下新增myid文件,内容为数字,对应server.1=slave1里的数字1

    • 将三台服务器的zk的权限,都赋给zookeeper用户
      chown -R zookeeper:zookeeper apache-zookeeper-3.6.2-bin/

    • 关闭防火墙
      systemctl stop firewalld.service

    • 进入zk的bin目录

      rm -rf *.cmd
      chmod +x *.sh

    • 依次启动
      ./zkServer.sh start

    • 查看状态
      ./zkServer.sh status

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rong742954

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值