一致性协议-Raft

10 篇文章 0 订阅
2 篇文章 0 订阅

Raft 协议被广泛实现或者参照,准确理解这个协议很有意义。

先上重要的参考链接:

  1. 理解其如何工作: http://thesecretlivesofdata.com/raft/#overview
    官方用动图讲解其如何工作。

  2. 了解更多细节特性: https://cloud.tencent.com/developer/article/1826594
    作者参考官方论文做的总结,可以快读掌握精髓。

  3. 进一步掌握其细节,阅读论文原文: https://raft.github.io/raft.pdf


正文

  1. Raft 是一个共识算法, 所谓共识算法,是对某个事件达成一致的看法。
  2. Raft 算法包含三个方面:
    • 选举算法( leader election)
    • 日志复制(log replication)
    • 一致性和安全性(safety)
  3. 节点角色
    • Leader 主节点,所有请求的处理者,接收客户端发起的操作请求,写入本地日志后同步到其他集群其他节点
    • Candidate 候选节点,当Follower一段时间收不到Leader 的心跳,就会称为候选节点,发起选主
    • Follower 从节点,接收主节点的日志,同步主节点的数据

选举过程

  1. 所有节点启动时都是 follower 状态, 在 一段时间(每个节点会有一个长度具有随机性的超时时间)如果没有收到来自 leader 的心跳,follower 切换为 candidate , 并发起选举。
  2. 如果收到了 majority 的选举票(包含自己的一票),那么切换为 leader 状态。
  3. 如果发现其他节点比自己更新,则主动切换为 follower
  4. 系统中只会存在一个 leader, 如果一段时间内没有 leader, 那么大家通过选举的方式选出 leader. leader 不停的向 follower 发出心跳,表面 leader 的存活状态, 如果l leader 故障,follower 会切换成 candidate 选举出新 leader。

在这里插入图片描述

日志复制

相同的初始状态+相同的输入 = 相同的结束状态
因此同步的过程会先同步日志(输入),然后Leader一声令下,Apply到各自本地

leader 选举出来后,就承担了领导整个集群的责任,开始接受客户端请求,并将操作包装成日志,发送给其他节点。

  1. leader 为客户端提供服务, 客户端的每个请求都包含一条被状态复制机执行的指令。
  2. leader 把该指令作为一个新的日志附加到自身的日志集合。然后向其他节点发起附加请求条目(AppendEntries RPC)。来要求其他节点将日志附加到自己的本地日志集合中。
  3. 当这条日志确保被安全复制,即 (N/2 +1) 节点有复制后,leader 将该日志 apply 到他本地的状态机中,然后把操作成功的结果返回给客户端。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值