Skip to content

Raft

leader 选举、日志复制、安全性、应用。

Updated View as Markdown
For humans

Raft

Raft 是可理解的共识协议:把 Paxos 的复杂性拆成三个子问题。面试必考:选举、复制、安全性。

三个子问题

子问题 解决
Leader 选举 谁当领导
日志复制 怎么保持一致
安全性 怎么保证不丢已提交日志

角色与任期

  • 三种角色:Leader(领导)、Follower(跟随)、Candidate(候选)
  • 任期(term):单调递增的编号,每次选举 +1
  • 心跳:Leader 定期发心跳,Follower 超时未收到 → 变 Candidate 发起选举

Leader 选举

选举: 超时触发, 多数票当选

  • 选举超时是随机的(150-300ms),避免同时竞选(分裂投票)
  • 得票过半当选(多数派原则)
  • 任期分裂:选不出时超时重选(随机超时保证最终收敛)

日志复制

1. 客户端请求 → Leader 追加日志条目
2. Leader 并行发 AppendEntries 给所有 Follower
3. 多数派确认后: 条目"已提交", Leader 应用到状态机
4. 下一心跳携带提交索引, Follower 应用
  • 多数派确认才提交:少数派故障不影响(过半即可)
  • 已提交的日志不会被覆盖(安全性保证)
  • 读也要经过 Leader 或 ReadIndex(保证线性一致,见一致性模型篇)

安全性:日志匹配与选举限制

机制 保证
日志匹配 同索引同任期 = 同内容(AppendEntries 一致性检查)
选举限制 候选人日志必须“足够新”才能当选(投票前比较)
提交规则 只提交当前任期的条目(防旧 Leader 覆盖新日志)

这些规则保证:已提交的日志永不会丢(这是 Raft 的核心安全性)。

应用

系统 用途
etcd 分布式 KV(K8s 元数据存储)
Consul 服务发现、配置
Kafka KRaft 元数据管理(见 Kafka 架构篇)
TiKV 分布式存储

面试话术:Raft 是“多数派 + 任期 + 日志”的组合。etcd 是它的最佳实践样本(K8s 的存储底座)。

面试追问

  1. Raft 三个子问题? 选举、日志复制、安全性。分解 Paxos 的复杂性
  2. 怎么选 leader? 心跳超时 → Candidate → 随机超时防分裂 → 多数票当选
  3. 日志怎么提交? Leader 复制到多数派才提交。少数派故障不影响
  4. 为什么不丢已提交日志? 选举限制(日志新的才能当选)+ 提交规则(当前任期)。安全性核心
  5. Raft 用在哪? etcd(K8s)、Consul、KRaft。配置/元数据类强一致场景
Navigation

Type to search…

↑↓ navigate↵ selectEsc close