Raft 共识

周海汉 2019-06-09
2019-06-09

概述

Raft是一种共识算法,用于多个分布式的系统,如zookeeper,谷歌chubby。用于保持数据的一致性。可替代paxos共识算法。其核心思想是由一个leader作为入口,由他来对数据进行接受和分发处理。该唯一leader必须得到多数节点的选票。所以即使集群分裂,最终还是会有多数节点会达成一致。

适用于彼此可信的节点环境。

角色

  • leader 1个
  • candidate 临时角色,没有leader时由follower转成
  • follower
  • client数据产生和请求者

leader选举过程

初始状态

每个节点都是follower状态

候选人状态

没有leader和他们通信时,随机等待150-300s超时时间 ,然后转为候选人状态。此时,有人比较快变成候选人,先发选举请求。如果同时成为候选人并且都不能得到多数票,则重新等待随机时间。 follower收到选举请求后回复同意或拒绝。

leader

  • 多数人回复同意后,候选人成为leader。
  • leader 定期和个follower进行心跳通信,确认自己活着,发送数据。

数据复制过程

  • client 发送数据
  • leader接到数据后变成准提交状态
  • leader将数据发送给follower
  • 多数人回复确认后成为确定版。
  • leader给client发送确认。
  • 新加入节点leader会从时间线开始复制数据

分裂过程

  • 如果分裂为两组,各自选举了leader。
  • 第一组得不到多数follower节点确认,所以一直是未确认数据。
  • 第二组得到多数节点确认,是确认数据。
  • 合并后,未确认数据会回滚。

优点:

  • 分布式一致性得到较好的保持

缺点

  • 节点要可信
  • leader只有一个,容易成为瓶颈。

reference

动画演示Raft


如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源