分区 Raft KV

分区 Raft KV - 图1

警告

分区 Raft KV 目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 issue 反馈。

v6.6.0 之前,基于 Raft 的存储引擎,TiKV 使用单个 RocksDB 实例存储该 TiKV 实例所有 Region 的数据。

为了更平稳地支持更大的集群,从 v6.6.0 开始,TiDB 引入了一个全新的 TiKV 存储引擎,该引擎使用多个 RocksDB 实例来存储 TiKV 的 Region 数据,每个 Region 的数据都独立存储在单个 RocksDB 实例中。

新的 TiKV 引擎能够更好地控制 RocksDB 实例的文件数和层级,并实现了 Region 间数据操作的物理隔离,避免相互影响。同时,该引擎支持平稳管理更多的数据。你可以理解为,TiKV 通过分区管理多个 RocksDB 实例,这也是该特性分区 Raft KV 名字的由来。

使用场景

如果你的 TiKV 集群有以下特点,可以考虑使用该功能:

  • 需要在单个 TiKV 实例支持更多的数据。
  • 具有大量写入吞吐。
  • 需要频繁地扩缩容。
  • 负载有较为严重的读写放大。
  • TiKV 内存尚有富余。

该功能的主要优势在于,提高写入性能,加快扩缩容速度,以及在相同硬件下支持更多数据和更大的集群。

使用方法

要启用分区 Raft KV,需要在创建集群时将配置项 storage.engine 设为 "partitioned-raft-kv"。同时,在使用分区 Raft KV 特性时,可以通过配置项 rocksdb.write-buffer-flush-oldest-firstrocksdb.write-buffer-limit 来控制 RocksDB 的内存使用。

使用限制

由于该功能为实验特性,目前有以下限制:

  • 暂不支持基于 EBS 的快照备份。
  • 暂不支持 Online Unsafe Recovery 和 Titan。
  • 暂不支持 tikv-ctl 命令行管理工具。
  • 初始化以后不支持开启或者关闭。