小白完全看不懂,要是有图就好了
Leader 节点在收到打快照的指令后,会启动一个后台线程(或协程/Worker) 来执行具体的快照生成任务
tikv 有配置参数,不会保留太久,
- 太过于占用空间,回放还要考虑 Term 的问题
- 不如采用新的 snapshot 重新对齐,在继续拉新追平
绑定逻辑
- 基于 Raft 日志索引的绑定
- 快照元数据包含
last_index(生成快照时 Raft 已 apply 的最大日志索引)和last_term(对应任期)。 - 当目标节点应用快照时,会将自身的
last_applied索引更新为快照的last_index,后续 Raft apply 直接从last_index + 1的日志开始执行,确保数据连续。
- 基于 Region epoch 的绑定
- 快照包含当前 Region 的
epoch(包含conf_ver和version),目标节点应用快照后会更新本地 Region 的 epoch,与集群保持一致。 - 若后续 Raft apply 携带的 epoch 与本地 epoch 不匹配,会触发 epoch 校验失败,保证路由正确性。
- 原子性应用 快照应用时会先替换 RocksDB 的 SST 文件,再更新 Raft 的
last_applied和 Region epoch,整个过程是原子性的,避免数据不一致。
1 个赞
tikv raft中的快照实现用的是mvcc吧
重新对齐是指拉全量的数据吗
这个有永久下线时间或者租期之类的概念或者配置吗