TiKV Raft 快照全流程丨TiKV 源码解读(二十二)
💡
原文中文,约9700字,阅读约需24分钟。
📝
内容提要
TiKV是一个支持事务的分布式Key-Value数据库,通过Raft协议实现数据的高可用性和强一致性。本文详细介绍了TiKV中Raft快照的生成、发送、接收和应用的实现。快照发送和接收机制通过gRPC流连接进行高效传输。快照生成过程在单独的线程池中进行,以避免阻塞其他任务。快照应用通过更新Raft状态机和RocksDB数据来保证数据一致性。
🎯
关键要点
- TiKV 是一个支持事务的分布式 Key-Value 数据库,使用 Raft 协议实现高可用性和强一致性。
- 本文介绍了 TiKV 8.2.0 版本中 Raft 快照的生成、发送、接收和应用的实现。
- TiKV 中的数据空间被切分为多个 Region,每个 Region 由一个 Raft 组管理。
- Raft Leader 负责将日志条目发送给 Followers,确保数据一致性。
- 当 Follower 落后太多时,Leader 会发送 Raft 快照,包含 Region 的完整状态。
- Raft 快照过程分为生成、发送、接收和应用四个阶段。
- 快照元数据和数据分离,快照数据存储在磁盘上,通过 gRPC 流连接传输。
- 快照生成过程在单独的线程池中进行,以避免阻塞其他任务。
- PeerStorage 负责生成和应用快照数据,快照生成后返回 Snapshot 结果。
- 快照发送任务由 Snap Worker 处理,通过 gRPC 流连接传输快照消息和数据。
- 快照接收后,发送到 Raftstore 以触发快照的应用。
- 快照应用过程中,Raft 状态机的日志和配置会被恢复,更新 Region 中的数据。
➡️