RAFT 算法简述

领导选举

比如现在有个 A、B、C 三个节点。

  1. 每个节点有个自旋时间(150ms-300ms),自旋时间到了,就成为候选人,并且通知其他的节点他已经是候选人了。
    • 比如 A 节点成了候选人,通知 B 、C,那么B C 就重置自旋时间。
  2. 候选人 A 会给自己投票,然后 B、C 会给最先收到的投票请求的节点投票。每个节点只能投票一次。投票
    • 比如 B、C 给 A 投票。A 成为了 Leader
  3. Leader A 给 B、C 发送更新日志。
  4. Leader A 和随从 B、C 之间会维持心跳检测,定期发送信息来确定节点是否存活(随从收到心跳检测消息后,会重置自旋时间)

一般要求集群节点个数为奇数个,这样投票就不容易出现两个候选人票数相同的情况。(票数相同,重新自选投票)

日志复制

比如现在有个 A、B、C 三个节点,A 是 Leader,B、C 是候选者。

  1. Leader A 收到更新数据为 5 的请求,则生成 log。
  2. 下一次心跳检测时,A 把 log 也发送给 B、C
  3. B、C 收到 log 后,回复给 Leader A
  4. A 收到回复后,提交更新,把数据更新成 5
  5. 下一次心跳检测时,A 发送指令,让 B、C 节点也提交数据。
  6. B、C 提交数据,然后回复给 A。
出现网络分区
  1. 假如出现网络分区,区之间不通信。那么分区各自进行领导选取和日志复制。

    image-20220815170212924

  2. 如果网络分区恢复,那么会选择选举轮数多的节点为新 leader。比如图中,leader E 进行了四轮选举,而 leader B 只进行了一轮,所以选择 E 为新 leader,而 B 和 A 中未提交的数据要进行回滚,并且同步新 leader 的数据。

    image-20220815170446376

能满足可用性吗?

不能,在选举领导期间,对所有请求会返回不可用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值