Zookeeper选举过程描述与状态迁移

本文深入探讨Zookeeper的选举过程,包括LOOKING、FOLLOWING、LEADING和OBSERVING四种状态的迁移。当Leader失效或Follower认为Leader失效时,会触发选举。FastLeaderElection类负责选举过程,利用QuorumCnxManager管理服务器间的连接。选举过程中,服务器通过比较epoch、zxid和sid来决定提案。当选出Leader后,Leader会重置zxid,并与Follower和Observer同步数据。
摘要由CSDN通过智能技术生成

Zookeeper服务端初始化过程(二):Leader选举过程

 

Server具有如下几种状态
LOOKING:失去leader信号,选举中
FOLLOWING:环境正常,对于follower而言,正在“跟随”leader
LEADING:环境正常,对于leader而言,正在“带领”
OBSERVING:环境正常,对于observer而言,正在“观察”

 

选举的时机:Leader失效,或者Follower认为Leader"失效";比如Follower首次加入集群时无法确定Leader则尝试选举,比如Follower和Leader之间的网络问题,导致Follower离群,此时Follower也会尝试"选举"--尽管是徒劳.Leader失效的时机为:当Leader和Follower发送ping时,遇到"多数派"的Follower无法响应时(可能多数Follower已经离群,或者Leader离群),此时Leader进入LOOKING模式,开始选举.


F1.FastLeaderElection类初始过程

 

  1. QuromCnxManager是一个相对底层的”链接”处理类,他负责管理当前server和其他server的socket链接,以及socket上数据的输入输出,对于FastLeader选举过程中所造成的消息发送和接受,均由此manager处理,它维持当前server和其他server建立的链接,以及侦听选举端口上,其他server的链接申请或者数据IO;链接为socket链接,非NIO长连接."链接"的作用,就是为选举过程中所发生的数据交互进行IO操作(例如,接收选举数据和发送头片数据等).
  2. 为了避免大量server之间互相建立socket链接,造成性能问题(甚至是不必要的重复链接),manager对链接的控制采取了一种” challenge”(挑战)方式,让任意2个server之间只有一个socket链接,而且总是sid较小的server作为socket server端,sid较大的作为sock client端,在整个分布式网络中,将这种有序有向的链接逐个节点传递下去.不过在初次通信时,server会尝试和所有的其他server发起链接,对于链接的socket server端,来决定是否接受(accept)链接.如果当前server发现socket终端的sid比自己的sid小,那么当前server就会放弃已经建立的链接(假如已经建立)或者关闭此socket,并主动向sid较小的server发起socket链接.选举过程中,如果socket超时或者其他原因终端,链接将会重建.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值