SST Snapshot用途

【 TiDB 使用环境】生产环境 or 测试环境 or POC
【 TiDB 版本】
【遇到的问题】
SST Snapshot主要在什么场景下应用或者产生呢?
【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

在 Raft 里面,如果 Follower 落后 Leader 太多,Leader 就可能会给 Follower 直接发送 snapshot。在 TiKV,PD 也有时候会直接将一个 Raft Group 里面的一些副本调度到其他机器上面。上面这些都会涉及到 Snapshot 的处理。

在现在的实现中,一个 Snapshot 流程是这样的:

  1. Leader scan 一个 region 的所有数据,生成一个 snapshot file
  2. Leader 发送 snapshot file 给 Follower
  3. Follower 接受到 snapshot file,读取,并且分批次的写入到 RocksDB

如果一个节点上面同时有多个 Raft Group 的 Follower 在处理 snapshot file,RocksDB 的写入压力会非常的大,然后极易引起 RocksDB 因为 compaction 处理不过来导致的整体写入 slow 或者 stall。

幸运的是,RocksDB 提供了 SST 机制,我们可以直接生成一个 SST 的 snapshot file,然后 Follower 通过 injest 接口直接将 SST file load 进入 RocksDB。

1 个赞

可以参考这里
https://pingcap.com/zh/blog/optimizing-raft-in-tikv

1 个赞

如果某个tikv上的region比较少,pd会调度其它tikv 节点上的region到这个tikv上来,调度大概策略先通过region的snap(复制region在某个时刻的状态)发送到这个tikv上,然后增量的数据就靠raft log 同步了,类似于mysql的主从搭建,先全量复制主库的数据搭建从库,然后从库通过binlog 进行同步数据

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。