tikv raft中快照的实现

小白完全看不懂,要是有图就好了

Leader 节点在收到打快照的指令后,会启动一个后台线程(或协程/Worker) 来执行具体的快照生成任务

tikv 有配置参数,不会保留太久,

  1. 太过于占用空间,回放还要考虑 Term 的问题
  2. 不如采用新的 snapshot 重新对齐,在继续拉新追平

绑定逻辑

  1. 基于 Raft 日志索引的绑定
  • 快照元数据包含 last_index(生成快照时 Raft 已 apply 的最大日志索引)和 last_term(对应任期)。
  • 当目标节点应用快照时,会将自身的 last_applied 索引更新为快照的 last_index,后续 Raft apply 直接从 last_index + 1 的日志开始执行,确保数据连续。
  1. 基于 Region epoch 的绑定
  • 快照包含当前 Region 的 epoch(包含 conf_verversion),目标节点应用快照后会更新本地 Region 的 epoch,与集群保持一致。
  • 若后续 Raft apply 携带的 epoch 与本地 epoch 不匹配,会触发 epoch 校验失败,保证路由正确性。
  1. 原子性应用 快照应用时会先替换 RocksDB 的 SST 文件,再更新 Raft 的 last_applied 和 Region epoch,整个过程是原子性的,避免数据不一致。
1 个赞

tikv raft中的快照实现用的是mvcc吧

重新对齐是指拉全量的数据吗

这个有永久下线时间或者租期之类的概念或者配置吗