Raft算法

Raft算法简介

Raft共识性算法是paxos算法的简化版,多用在分布式环境中,集群成员通过投票对某事项决议,多数票通过,则共识达成。集群leader的选举,如kafka分区leader partion的选举。Parxos本身也是通过投票,多数票通过,则共识达成。但是Raft比Paxos投票过程做了一定的简化,并考虑具体的业务场景本身特点,并利用业务场景特点,快速达成共识。

Raft算法涉及成员角色

  • leader
    集群的领导者,针对主从集群,通常承担集群的主的角色,负责用户的写请求,并把数据同步给集群的从角色。
  • flower
    集群的从角色,针对主从集群,负责用户的读请求,并从主同步数据,和主保持数据同步,并参入投票。针对主备集群,flower不处理用户的读请求。
  • candidate
    投票决议的发起者,当集群出现需要通过投票达成共识时,candidate发起投票决议,其他角色参入投票。

Raft算法投票过程

  1. 集群刚开始启动时,成员都是flower角色,等待leader角色和自己通信,
    刚开始启动,由于都是flower角色,肯定会出现flower等待leader通信超时,
    第一个等待超时的成为candidate,并投自己一票,投票消息内容:(term,value),term是任期,每次更换leader,term+1。同时向其他成员发起投票决议。
  2. 其他成员接收到投票决议后,看term和本地term大小做比较,若接收到的term大于自己的term,则同意发起者投票,否则丢弃。
  3. candidate收到投自己的票数过半,则此次决议共识达成,自己转换成leader角色,同时向其他成员传递自己当选leader信息,包括term,leaderId等信息。
  4. 其他角色接收到leader当选信息后,更新自己本地leader信息,集群达成一致状态,集群可以对外提供服务了。
  5. 若第三步candidate接收到其他flower的投票响应超时或者为过半,重新发起新一轮投票,转入第一步继续;
  6. 若集群运行过程中,有flower发现连接leader超时,则转入第一步。
  7. 有的集群考虑具体业务场景,比如集群启动时,不需要投票,集群中每个成员都配置有自己的id,那么id最小的直接成为leaer角色,然后同步leader当选角色信息给其他flower,转入第四步;
  8. 还有集群在leader宕机时,选择那个和leader保持数据同步最新的flower成为leader角色,转入第四步。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值