zookerper集群Leader选举

集群角色

在这里插入图片描述

Leader

  • 处理所有读写请求,有一个Leader.
  • 收到写请求,先记录事务日志,然后给Follower节点发送同步数据的请求。
  • 只有一半以上的节点写事务日志成功,才会更新内存数据.

Follower

  • 只能处理读请求,参与Leader选举.
  • 收到的写请求会转发给Leader处理.
  • Follower收到同步数据请求,也会记录事务日志,然后响应ACK.

Observer

  • 只能处理读请求,收到的请求转发给Leader.
  • 不参与选举,每增加一台Observer,可以分担读请求的压力,不影响服务端的性能.

集群选举

// 假设场景
现在启动zk集群,一共3个节点:myid = 1,myid = 2,myid = 3.
首先启动机器12,此时会进行leader选举
// 选举大致流程
1.第一轮投票都会先投自己一票
myid1 ->10)
myid2 ->202.接着将自己的选票发送给对方
3.收到对方的选票和自己的选票进行pk 
(选举周期 > 事务id > 机器id)
myid1:(10),(2,0)
myid2:(20),(1,0)
4.第一轮pk结果
myid1:(2,0)
myid2: 2:(2,0)
5.进行第二轮投票,把第一轮胜出的票投出去
6.机器12都会投出(207.最终机器2会有2票,超过半数,选为leader.
8.当后续myid = 3启动加入集群,已经存在leader,则自动变为follower

在这里插入图片描述

集群选举架构

// 涉及队列
// 1.sendqueue
这是本地应用层的发送队列,用于存放本地应用层产生的消息.
这些消息需要发送到集群中的其他服务器。这个队列中的消息会被WorkerSender处理并发送到集群中。
// 2.queueSendMap
这是传输层的待发送列表,存放的是需要发送到其他服务器的消息。
WorkerSender会从sendqueue中取出消息,然后将其放入queueSendMap中进行发送。
// 3.recvQueue
这是传输层的接收队列,存放其他服务器发来的消息。
当远端机器的queueSendMap中的消息发送到本机时,会被RecvWorker接收并放入recvQueue中。
// 4.recvqueue
这是本地应用层接收后的队列,存放recvQueue中的消息。
WorkerReceiver会从recvQueue中取出消息并将其放入recvqueue,供本地应用层进一步处理。

在这里插入图片描述总体来说,这些队列和流程用于实现 ZooKeeper 集群中的 Leader 选举和消息传递机制。这是一个分布式系统中常见的模式,确保各个节点之间的通信和同步。

集群启动源码

可以通过下面zk集群启动的源码过程,加深zk集群的选举逻辑.
在这里插入图片描述

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值