大数据学习(72)-zookeeper选举机制
🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
ZooKeeper的选举机制是基于ZAB(Zookeeper Atomic Broadcast)协议的,这是一种基于Paxos协议的变种,专门用于ZooKeeper的分布式协调服务。该机制确保集群中只有一个领导节点(Leader),负责处理所有的写请求和大部分的读请求,其他的节点则作为跟随者(Follower)或观察者(Observer),负责处理读请求并接收来自领导者的更新。
一、选举流程
服务器状态初始化:
当一个新的ZooKeeper服务器加入集群时,它会向其他服务器发送一个LOOKING状态的消息,表明它处于寻找领导者的状态。
投票发起:
每个处于LOOKING状态的服务器都会为自己投票,并开始一个选举轮(Election Round)。投票信息包含所选举的leader的Server ID(SID)、数据ID(ZXID)和逻辑时钟(Epoch)。
传播投票结果:
服务器会向集群中的其他服务器传播自己的投票信息。
收集投票:
每个服务器都会收集来自其他服务器的投票,并计算当前得票最高的服务器。
判断与决策:
如果一个服务器发现当前的投票结果指向自己,并且没有收到更多指向其他服务器的投票(即获得了超过半数的支持),它将宣布自己为领导者,并向其他服务器发送一个LEADING状态的消息。
其他服务器收到LEADING状态的消息后,确认领导者,并进入FOLLOWING状态,开始跟随领导者。
二、选举中的概念
Server ID(SID):
服务器ID,用于区分不同的服务器实例,通常在配置文件中指定。在选举中,SID较大的服务器在ZXID相同时具有优先权。
Zookeeper Transaction ID(ZXID):
事务的唯一标识符,是一个64位整数。它由高位32位的epoch(时期)和低位32位的counter(计数器)组成。ZXID较大的服务器被认为拥有更多的信息,因此更适合作为Leader。
Epoch(逻辑时钟):
逻辑时钟或投票的次数,用于标识同一轮投票过程中的逻辑时钟值。每投完一次票,这个数据就会增加。
三、选举触发条件
服务器初始化启动:
当节点初始起动时会在集群中寻找Leader节点。如果找到,则与Leader建立连接,其自身状态变为Follower或Observer。如果没有找到Leader,当前节点状态将变为LOOKING,进入选举流程。
Leader故障:
如果Leader服务器宕机或无法与多数派Follower保持连接,所有Follower将进入LOOKING状态,并重新开始选举流程。