Zookeeper-Leader选举

Zookeeper 是Cp 还是 AP

答:cp zookeeper为了保证一致性会在leader挂掉的时候进行投票停顿,此时无法提供服务,服务器处于LOOKING 状态。是不可用的,所以他为了保证一致性,放弃了可用性。

集群的角色

在上篇集群搭建中我们最后搭建了Leader、2个Follower 的集群。但是Zookeeper 集群中是有三种角色类型的服务器:

leader
  • 事务请求的唯一调度和处理者,保证集群事务处理的顺序性。
  • 集群内部各服务器的调度者。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kR6iVNgf-1577330868365)(2C57520C9AE74893989E61CF993B3F6A)]

1. PrepRequestProcessor

Leader请求预处理器。在zookeeper当中,我们会将哪些改变服务器状态的请求称为事务请求,创建节点,更新数据,删除节点,创建会话。当前处理器会识别请求事务是否是事务请求。对于事务请求,PreqRequestProcessor 会进行预处理。比如创建事务请求头,事务体,会话检查,ACL检查和版本检查。

2. ProposalRequestProcessor

ProposalRequestProcessor处理器是Leader事务投票处理器。也是Leader服务器事务处理流程的发起者。
非事务请求ProposalRequestProcessor交给CommitProcessor;
事务请求除了要提交给CommitProcessor之外还要创建Proposal提议发给集群所有的Follower服务器发起一次集群内的事务投票。

3 SyncRequestProcessor

是事务日志记录处理器。

Follower
  • 处理客户端的非事务请求,转发事务请求给Leader服务器。
  • 参与事务请求Proposal的投票
  • 参与Leader选举

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56EftJLY-1577330868366)(8918E89D0EA94252806A359E1B6FF9FC)]

FollowerReuqestProcessor

FollowerReuqestProcessor 识别当前请求是否是事务请求,如果是转发给Leader服务器,leader 收到之后会将其提交到请求处理链。

SendACkRequestProcessor
将Ack消息的方式向Leader服务器进行反馈。

Leader选举

服务器启动时的Leader选举

  1. 每个server 会发出一个投票
    投票的形式(myid,ZXID),初始阶段都会投票给自己,然后发送给集群中的所有机器。
    Server1(1,0)、Server2(2,0) 、 Server3(3,0)

  2. 接受来自各个服务器的投票
    每个服务器都会接受来自其他服务器的投票。会判断投票的有效性:
    是否是本轮投票,是否是来自LOOKING状态的服务器。

  3. 处理投票
    针对每一个投票服务器都需要将别人的投票跟自己的投票PK,规则如下:

  • 优先检查ZXID 大的作为Leader
  • ZXID相等就比较myid,较大的最为leader
  1. 统计投票
    每次投票后都会统计所有投票,判断是否已经由过半的几期接受到相同的投票信息。如果存在过半的服务器的投票时大于一半以上的。既认为已经选出Leader

5改变服务器的状态

运行期间的leader选择

  1. 当Leader挂了,余下的非Observer服务器都会将自己的服务器状态变更为LOOKING
  2. 每个Server会发出一个投票
    生成投票信息(MyId,ZXID),因为时运行期间ZXID 可能不同,先投给自己 然后发送给集群的所有机器。
  3. 接收来自各个服务器的投票
  4. 处理投票
    ZXID 大的会成为Leader

5.统计投票改变状态
6.改变服务器的状态

选举算法的概念

SID myid文件的值
ZXID 事务ID
Vote 投票
Quorum: 过半机器去数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值