当前位置: 首页 > news >正文

Raft协议

Raft 协议是一种分布式系统中的一致性算法,核心目标是让多个节点在存在故障(如节点崩溃、网络分区)的情况下,依然能协同工作并维护一份一致的数据副本,常用于分布式数据库、分布式存储等场景(如 Etcd、Consul 均基于 Raft 实现)。

Raft 协议的核心设计:角色与任期

Raft 通过 “角色划分” 和 “任期机制” 简化一致性逻辑,避免了复杂的状态转换,这也是它比传统 Paxos 算法更易理解和实现的关键。

1. 三种核心角色

每个节点在任意时刻只能扮演一种角色,角色会根据集群状态动态切换:

  • Leader(领导者):集群中唯一的 “决策者”,负责接收客户端请求、向 Followers 同步数据、发起投票等。
  • Follower(追随者):被动接收 Leader 的数据同步和指令,不主动发起请求;当 Leader 失联时,可能转为 Candidate。
  • Candidate(候选者):当 Follower 长时间未收到 Leader 的心跳时,会转为 Candidate 并发起 “选举”,争取成为新 Leader。
2. 任期(Term)

Raft 将时间划分为连续的 “任期”(用整数编号,如 Term 1、Term 2),每个任期对应一次 Leader 选举:

  • 任期开始时,若原 Leader 失联,集群会发起选举,产生新 Leader(若选举成功,该 Leader 会主导整个任期)。
  • 若选举失败(如多个 Candidate 同时竞争,无节点获得多数票),则进入下一个任期,重新选举。
  • 任期机制能有效解决 “脑裂”(多个 Leader 并存)问题:新任期的 Leader 会覆盖旧任期 Leader 的数据。

Raft 协议的三大核心流程

Raft 一致性通过 “Leader 选举”“日志复制”“安全性保证” 三个核心流程实现,确保集群数据一致。

1. Leader 选举:从无 Leader 到产生 Leader

当 Follower 超过一定时间(“选举超时时间”,通常 150-300ms)未收到 Leader 心跳时,触发选举:

  1. Follower 转为 Candidate:该节点自增任期号(如从 Term 2 到 Term 3),给自己投 1 票,并向集群所有其他节点发送 “投票请求(RequestVote)”。
  2. 其他节点投票:节点收到请求后,若未在当前任期投过票,且请求节点的日志 “至少和自己一样新”(日志完整性保证),则投赞成票。
  3. 选举结果判定
    • 若 Candidate 收到多数节点(超过集群节点数的 1/2,如 3 节点需 2 票,5 节点需 3 票)的赞成票,则成为新 Leader。
    • 新 Leader 立即向所有节点发送 “心跳(AppendEntries)”,宣告自己的 Leader 身份,防止其他节点发起新选举。
    • 若多个 Candidate 同时发起请求,导致无节点获多数票,则所有节点等待随机的 “选举超时时间” 后重试,避免再次冲突。
2. 日志复制:Leader 确保数据一致

Leader 产生后,所有客户端请求(如写数据)都会先发送给 Leader,再由 Leader 同步到所有 Follower,流程如下:

  1. Leader 接收请求:客户端发送写请求,Leader 将请求内容封装为 “日志条目”,加入自己的日志(此时日志为 “未提交” 状态)。
  2. 同步日志到 Follower:Leader 向所有 Follower 发送 “AppendEntries 请求”,携带日志条目和当前任期号,要求 Follower 追加日志。
  3. Follower 确认与 Leader 提交
    • Follower 收到请求后,若日志完整性符合要求(如前序日志已提交),则追加日志并向 Leader 回复 “成功”。
    • 当 Leader 收到多数 Follower 对该日志条目的 “成功” 回复后,将该日志标记为 “已提交”,并执行请求(如修改本地数据)。
    • Leader 在下一次心跳中,告知所有 Follower 该日志已提交,Follower 收到后执行日志并回复客户端。
  4. 容错性:若部分 Follower 因故障未收到日志,Leader 会在 Follower 恢复后,重新发送未同步的日志,确保最终所有节点日志一致。
3. 安全性保证:避免数据不一致

Raft 通过以下规则确保 “无论发生何种故障,集群数据始终一致”:

  • 选举时日志优先:Candidate 必须拥有 “至少和其他节点一样新” 的日志,才能被投票(避免日志落后的节点成为 Leader,导致旧数据覆盖新数据)。
  • Leader 只追加日志:Leader 不会修改或删除已有的日志条目,只会追加新日志(防止 Leader 篡改历史数据)。
  • Follower 日志冲突处理:若 Follower 的日志与 Leader 不一致,Leader 会找到两者的 “日志分歧点”,要求 Follower 删除分歧点后的所有日志,再重新同步 Leader 的日志。

Raft 协议的核心优势

  • 易理解:通过角色、任期划分,将复杂的一致性问题拆分为 “选举、日志复制、安全性” 三个独立流程,比 Paxos 更易学习和实现。
  • 强容错:能容忍集群中 (N-1)/2 个节点故障(如 3 节点集群可容忍 1 个故障,5 节点可容忍 2 个故障),且故障节点恢复后能自动同步数据。
  • 适用场景广:支持 “读多写少” 或 “写多” 场景,可通过 “只读 Leader”“租约机制” 优化读性能,常用于分布式配置中心、分布式锁、分布式数据库等。

总结

Raft 协议的本质是 “通过 Leader 主导、多数节点确认” 的机制,在分布式环境中实现数据一致性。它通过角色划分简化流程,用任期避免脑裂,靠日志复制和安全性规则确保数据不丢失、不冲突,是目前工业界最主流的分布式一致性算法之一。

http://www.dtcms.com/a/561809.html

相关文章:

  • 快速建设网站视频教程网站内容质量
  • 建设银行网站登不上牛商网做网站的思路
  • C语言程序代码(四)
  • 仿射变换的图像配准技术
  • wordpress看文网站芜湖营销网站建设
  • 泰州企业建站程序做购物网站的图标从哪里来
  • 1. Linux C++ muduo 库学习——库的编译安装
  • C++中的多态
  • C++ 使用 SQLite3 数据库
  • 郑州做网站的专业公司有哪些导购网站自己做电商
  • 松江品划网站建设推广美食网站建设策划书范文
  • 网站建设 全包 模板安徽省建设干部学校网站关停
  • 从空间几何到地球重量——张祥前质量定义方程的实证推导
  • 做网站有什么注意事项新手怎样做网络营销推广
  • 网站账户上的余额分录怎么做做网站的目的是什么
  • Wan-AI/Wan2.2-Animate-14B
  • 杂记 17
  • 国际营销网站建设新型实体企业100强
  • 载带 东莞网站建设英文网站搜索
  • 【Java】关于mybatis动态拼接SQL实现动态查询时遇到的一些问题
  • 做电影网站会违法吗网站模块怎么恢复
  • 网站程上传服务商类型是什么意思
  • 3.基础--数据模型
  • 设计logo网站生成器个人电脑做网站服务器网站
  • 49.渗透-Yakit-基础模块应用(爆破与未授权检测)
  • Taro 开发快速入门手册
  • html5网络公司网站模板wordpress 左右翻页
  • Python GUI 编程(Tkinter)
  • 外贸商业网站建设重庆专业的网站建设公司
  • 做怎么样的网站好wordpress 技术类主题