跳到主要内容

三十三、RocketMQ 多副本前置篇:初探raft协议


Raft协议是分布式领域解决一致性的又一著名协议,主要包含Leader选举、日志复制两个部分。

> 温馨提示:
> 本文根据raft官方给出的raft动画进行学习,其动画展示地址:http://thesecretlivesofdata.com/raft/

本节目录

  • 1、Leader选举
  • 1.1 一轮投票中,只有一个节点发起投票的情况
  • 1.2 一轮投票中,超过一个节点发起投票的情况
  • 1.3 思考如何实现Raft选主

2、 日志复制;

1、Leader选举

1.1 一轮投票中,只有一个节点发起投票的情况

 
Raft协议中节点有3种状态(角色):

  • Follower
    跟随者。
  • Candidate
    候选者。
  • Leader
    领导者(Leader),通常我们所说的的主节点。

首先3个节点初始状态为 Follower,每个节点会有一个超时时间(计时器),其时间设置为150ms~300ms之间的随机值。当计时器到期后,节点状态从 Follower 变成 Candidate,如下图所示:
 
通常情况下,三个节点中会有一个节点的计时器率先到期,节点状态变为 Candidate ,候选者状态下的节点会发起选举投票。我们先来考虑只有一个节点变为Candidate时是如何进行选主的。

当节点状态为Candidate,将发起一轮投票,由于是第一轮投票,设置本轮投票轮次为1,并首先为自己投上一票,正如上图所示的NodeA节点,Team为1,Vote Count为1.