Raft 共识算法1-Raft基础

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Raft 是一种用于管理第 2 节中描述的形式的复制日志的算法。@fig2 以压缩形式总结了该算法以供参考,@fig3 列出了该算法的关键属性; 这些图片中的元素将在本节的其余部分进行分段讨论。

Raft 共识算法1-Raft基础

Raft算法中译版地址: http://www.redisant.cn/etcd/contact

英原论文地址:https://raft.github.io/raft.pdf

Etcd Assistant 是一款 etcd 可视化管理软件,便捷高效地操作您的 etcd 集群;支持多种键的视图;管理租约、用户、角色和权限。

Raft 是一种用于管理第 2 节中描述的形式的复制日志的算法。@fig2 以压缩形式总结了该算法以供参考,@fig3 列出了该算法的关键属性; 这些图片中的元素将在本节的其余部分进行分段讨论。

Raft 通过首先选举一个领导者来实现共识,然后让领导者完全负责管理复制的日志。 领导者接受来自客户端的日志条目,将它们复制到其他服务器上,并告诉服务器何时可以安全地将日志条目应用到它们的状态机。 拥有领导者可以简化复制日志的管理。 例如,领导者可以在不咨询其他服务器的情况下决定在日志中放置新条目的位置,并且数据以简单的方式从领导者流向其他服务器。 领导者可能会失败或与其他服务器断开连接,在这种情况下会选举出新的领导者。

考虑到领导方法,Raft将共识问题分解为三个相对独立的子问题,在后面的小节中讨论:

  • 领导者选举(Leader election):当现有领导者失败时,必须选择新的领导者(第 5.2 节)。
  • 日志复制(Log replication):领导者必须接受来自客户端的日志条目并在集群中复制它们,强制其他日志与其自己的日志一致(第 5.3 节)。
  • 安全性(Safety):Raft 的关键安全属性是 @fig3 中的状态机安全属性:如果任何服务器已将特定日志条目应用到其状态机,则没有其他服务器可以对同一日志索引应用不同的命令。 5.4 节描述了 Raft 如何确保这个属性; 该解决方案涉及对第 5.2 节中描述的选举机制的额外限制。

fig3.png
Raft 保证这些属性中的每一个在任何时候都是真实的。 节号表示讨论每个属性的位置。

在介绍了共识算法之后,本节讨论可用性问题和计时在系统中的作用。

== Raft 基础

一个 Raft 集群包含多个服务器; 五是一个典型的数字,它允许系统容忍两次故障。 在任何给定时间,每个服务器都处于三种状态之一:领导者(leader)、追随者(follower)或候选者(candidate)。 在正常操作中,只有一个领导者,所有其他服务器都是追随者。 追随者是被动的:他们不自己发出请求,只是简单地响应领导者和候选者的请求。 领导者处理所有客户端请求(如果客户端请求跟随者,则跟随者将其重定向到领导者)。 第三种状态,候选者,用于选举新的领导者,如第 5.2 节所述。 @fig4 显示了状态及其转换; 下面讨论这种转换。

fig2.png
Raft 共识算法的简要总结(不包括成员变更和日志压缩)。 左上框中的服务器行为被描述为一组独立且重复触发的规则。 §5.2 等节号表示讨论特定功能的位置。 正式规范更准确地描述了该算法。

fig4.png
服务器状态。 追随者只响应来自其他服务器的请求。 如果一个追随者没有收到任何通讯,它就成为候选者并发起选举。 从整个集群中获得大多数选票的候选者成为新的领导者。 领导者通常会一直运作到失败为止。

Raft 将时间划分为任意长度的任期(term),如 @fig5 所示。任期用连续的整数编号。 每个任期都以选举开始,其中一名或多名候选者试图成为第 5.2 节所述的领导者。如果候选人赢得选举,那么它将在该任期的剩余时间内担任领导者。 在某些情况下,选举会导致分裂投票。 在这种情况下,任期将以没有领导者结束; 新任期(包括新选举)即将开始。 Raft 确保在给定任期内至多有一个领导者。

fig5.png
时间分为任期,每个任期从选举开始。 选举成功后,一个领导者管理集群直到任期结束。 有些选举失败,在这种情况下,任期结束时不会选择领导者。 可以在不同服务器上的不同时间观察到任期之间的转换。

不同的服务器可能会在不同的时间观察任期之间的转换,并且在某些情况下,服务器可能不会观察到选举甚至整个任期。 任期在 Raft 中充当逻辑时钟,它们允许服务器检测过时的信息,例如陈旧的领导者。 每个服务器存储一个当前任期号,它随时间单调增加。 每当服务器通信时,都会交换当前任期; 如果一个服务器的当前任期小于另一个,则它将其当前任期更新为较大的值。 如果候选者或领导者发现其任期已过期,则会立即恢复为追随者状态。 如果服务器收到带有陈旧任期号的请求,它会拒绝该请求。

Raft 服务器使用远程过程调用 (RPC) 进行通信,基本的共识算法只需要两种类型的 RPC。 RequestVote RPC 由候选者在选举期间发起(第 5.2 节),AppendEntries RPC 由领导者发起以复制日志条目并提供一种心跳形式(第 5.3 节)。 第 7 节添加了第三个 RPC,用于在服务器之间传输快照。 如果服务器没有及时收到响应,它们会重试 RPC,并且它们会并行发出 RPC 以获得最佳性能。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
存储 算法 安全
分布式系统架构1:共识算法Paxos
本文介绍了分布式系统中实现数据一致性的重要算法——Paxos及其改进版Multi Paxos。Paxos算法由Leslie Lamport提出,旨在解决分布式环境下的共识问题,通过提案节点、决策节点和记录节点的协作,确保数据在多台机器间的一致性和可用性。Multi Paxos通过引入主节点选举机制,优化了基本Paxos的效率,减少了网络通信次数,提高了系统的性能和可靠性。文中还简要讨论了数据复制的安全性和一致性保障措施。
17 1
|
2月前
|
算法
raft算法的自我理解
本文介绍了Raft算法的基本概念和工作原理,包括它如何通过日志复制和领导选举来实现分布式系统中不同机器的强一致性。
31 2
|
5月前
|
算法
Bully、Raft、Zab选举算法的差异比较
Bully算法、Raft算法、Zab的差与异。他们如何脱胎于Paxos而成?
|
4月前
|
存储 算法 NoSQL
(七)漫谈分布式之一致性算法下篇:一文从根上儿理解大名鼎鼎的Raft共识算法!
Raft通过一致性检查,能在一定程度上保证集群的一致性,但无法保证所有情况下的一致性,毕竟分布式系统各种故障层出不穷,如何在有可能发生各类故障的分布式系统保证集群一致性,这才是Raft等一致性算法要真正解决的问题。
119 11
|
4月前
|
存储 算法 索引
(六)漫谈分布式之一致性算法上篇:用二十六张图一探Raft共识算法奥妙之处!
现如今,大多数分布式存储系统都投向了Raft算法的怀抱,而本文就来聊聊大名鼎鼎的Raft算法/协议!
128 8
|
5月前
|
算法
共识协议的技术变迁问题之Raft的选举算法进行如何解决
共识协议的技术变迁问题之Raft的选举算法进行如何解决
103 7
|
8天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
5天前
|
算法
基于WOA鲸鱼优化的购售电收益与风险评估算法matlab仿真
本研究提出了一种基于鲸鱼优化算法(WOA)的购售电收益与风险评估算法。通过将售电公司购售电收益风险计算公式作为WOA的目标函数,经过迭代优化计算出最优购电策略。实验结果表明,在迭代次数超过10次后,风险价值收益优化值达到1715.1万元的最大值。WOA还确定了中长期市场、现货市场及可再生能源等不同市场的最优购电量,验证了算法的有效性。核心程序使用MATLAB2022a实现,通过多次迭代优化,实现了售电公司收益最大化和风险最小化的目标。
|
2天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
9天前
|
算法
基于大爆炸优化算法的PID控制器参数寻优matlab仿真
本研究基于大爆炸优化算法对PID控制器参数进行寻优,并通过Matlab仿真对比优化前后PID控制效果。使用MATLAB2022a实现核心程序,展示了算法迭代过程及最优PID参数的求解。大爆炸优化算法通过模拟宇宙大爆炸和大收缩过程,在搜索空间中迭代寻找全局最优解,特别适用于PID参数优化,提升控制系统性能。