RawKV BR 使用手册

如何使用 RawKV BR

本文是 RawKV BR 的使用手册。

TiKV Backup & Restore (TiKV-BR) 是 TiKV 分布式备份恢复的命令行工具,用于对 TiKV 集群进行数据备份和恢复。

工作原理

TiKV-BR 将备份或恢复操作命令下发到各个 TiKV 节点。TiKV 收到命令后执行相应的备份或恢复操作。 在一次备份或恢复中,各个 TiKV 节点都会有一个对应的备份路径,TiKV 备份时产生的备份文件将会保存在该路径下,恢复时也会从该路径读取相应的备份文件。

Figure 1. TiKV-BR 工作原理

安装

使用 TiUP 安装

tikv-brTiUP 的一个组件,你可以使用 TiUP 来部署 tikv-br:

tiup tikv-br:v1.1.0 <命令> <子命令> 

如果是第一次使用,TiUP 会自动下载和安装 tikv-br 组件。

手工安装

你可以从 GitHub 下载 tikv-br 的最新发行版。

推荐部署配置

  • 生产环境中,推荐 TiKV-BR 运行在(4 核+/8 GB+)的节点上。操作系统版本要求可参考 操作系统及平台的要求
  • 推荐使用 Amazon s3 存储 或者 SSD 网盘,挂载到 TiKV-BR 节点和所有 TiKV 节点上,网盘推荐万兆网卡,否则带宽有可能成为备份恢复时的性能瓶颈。
  • TiKV-BR 只支持版本大于 v5.0.0 的 TiKV 集群中 RawKV 模式数据的备份和恢复。
  • 建议为备份和恢复配置足够的资源:
    • TiKV-BR、TiKV 节点和备份存储系统需要提供大于备份速度的的网络带宽。当集群特别大的时候,备份和恢复速度上限受限于备份网络的带宽。
    • 备份存储系统还需要提供足够的写入/读取性能(IOPS),否则它有可能成为备份恢复时的性能瓶颈。
    • TiKV 节点需要为备份准备至少额外的两个 CPU core 和高性能的磁盘,否则备份将对集群上运行的业务产生影响。

最佳实践

下面是使用 TiKV-BR 进行备份恢复的几种推荐操作:

  • 推荐在业务低峰时执行备份操作,这样能最大程度地减少对业务的影响。
  • TiKV-BR 支持在不同拓扑的集群上执行恢复,但恢复期间对在线业务影响很大,建议低峰期或者限速 (rate-limit) 执行恢复。
  • TiKV-BR 备份最好串行执行。不同备份任务并行会导致备份性能降低,同时也会影响在线业务。
  • TiKV-BR 恢复最好串行执行。不同恢复任务并行会导致 Region 冲突增多,恢复的性能降低。
  • 可以通过指定 --checksum=true,在备份、恢复完成后进行一轮数据校验。数据校验将分别计算备份数据与 TiKV 集群中数据的 checksum,并对比二者是否相同。请注意,如果需要进行数据校验,请确保在备份或恢复的全过程,TiKV 集群没有数据变更和 TTL 过期。
  • TiKV-BR 可用于实现 api-version 从 V1 到 V2 的集群数据迁移。通过指定 --dst-api-version V2api-version=1 的 TiKV 集群备份为 V2 格式,然后将备份文件恢复到新的 api-version=2 TiKV 集群中。

TiKV-BR 命令行描述

一条 tikv-br 命令是由子命令、选项和参数组成的。子命令即不带 - 或者 -- 的字符。选项即以 - 或者 -- 开头的字符。参数即子命令或选项字符后紧跟的、并传递给命令和选项的字符。

备份集群 Raw 模式数据

要备份 TiKV 集群中 Raw 模式数据,可使用 tikv-br backup raw 命令。该命令的使用帮助可以通过 tikv-br backup raw --help 来获取。 用例:将 TiKV 集群中 Raw 模式数据备份到 s3 /backup-data/2022-09-16/ 目录中。

export AWS_ACCESS_KEY_ID=&{AWS_KEY_ID};
export AWS_SECRET_ACCESS_KEY=&{AWS_KEY};
tikv-br backup raw \
    --pd="&{PDIP}:2379" \
    --storage="s3://backup-data/2022-09-16/" \
    --dst-api-version v2 \
    --log-file="/tmp/backupraw.log \
    --gcttl=5m \
    --start="a" \
    --end="z" \
    --format="raw"

命令行各部分的解释如下:

  • backuptikv-br 的子命令。
  • rawbackup 的子命令。
  • -s--storage:备份保存的路径。
  • "s3://backup-data/2022-09-16/"--storage 的参数,保存的路径为 S3 的 /backup-data/2022-09-16/ 目录。
  • --pdPD 服务地址。
  • "${PDIP}:2379"--pd 的参数。
  • --dst-api-version: 指定备份文件的 api-version,请见 TiKV API v2
  • v2: --dst-api-version 的参数,可选参数为 v1v1ttlv2(不区分大小写),如果不指定 dst-api-version 参数,则备份文件的 api-version 与指定 --pd 所属的 TiKV 集群 api-version 相同。
  • gcttl: GC 暂停时长。可用于确保从存量数据备份到 创建 TiKV-CDC 同步任务 的这段时间内,增量数据不会被 GC 清除。默认为 5 分钟。
  • 5m: gcttl 的参数,数据格式为数字 + 时间单位, 例如 24h 表示 24 小时,60m 表示 60 分钟。
  • start, end: 用于指定需要备份的数据区间,为左闭右开区间 [start, end)。默认为["", ""), 即全部数据。
  • formatstartend 的格式,支持 rawhexescaped 三种格式。

备份期间会有进度条在终端中显示,当进度条前进到 100% 时,说明备份已完成。

备份完成后,会显示如下所示的信息:

[2022/09/20 18:01:10.125 +08:00] [INFO] [collector.go:67] ["Raw backup success summary"] [total-ranges=3] [ranges-succeed=3] [ranges-failed=0] [backup-total-regions=3] [total-take=5.050265883s] [backup-ts=436120585518448641] [total-kv=100000] [total-kv-size=108.7MB] [average-speed=21.11MB/s] [backup-data-size(after-compressed)=78.3MB]

以上信息的解释如下:

  • total-ranges: 备份任务切分成的分片个数, 与 ranges-succeed + ranges-failed 相等.
  • ranges-succeed: 成功分片的个数。
  • ranges-failed: 失败分片的个数。
  • backup-total-regions: 执行备份任务的 TiKV region 个数。
  • total-take: 备份任务执行时长。
  • backup-ts: 备份时间点,只对 API V2 的 TiKV 集群生效。可以用于 创建 TiKV-CDC 同步任务 时的 start-ts.
  • total-kv: 备份文件中键值对的个数。
  • total-kv-size: 备份文件中键值对的大小。请注意,这是指压缩前的大小。
  • average-speed: 备份速率,约等于 total-kv-size / total-take
  • backup-data-size(after-compressed): 备份文件的大小。

恢复 Raw 模式备份数据

要将 Raw 模式备份数据恢复到集群中来,可使用 tikv-br restore raw 命令。该命令的使用帮助可以通过 tikv-br restore raw --help 来获取。
用例:将 s3 /backup-data/2022-09-16/ 路径中的 Raw 模式备份数据恢复到集群中。

export AWS_ACCESS_KEY_ID=&{AWS_KEY_ID};
export AWS_SECRET_ACCESS_KEY=&{AWS_KEY};
tikv-br restore raw \
    --pd "${PDIP}:2379" \
    --storage "s3://backup-data/2022-09-16/" \
    --log-file restoreraw.log

以上命令中,--log-file 选项指定把 TiKV-BR 的 log 写到 restoreraw.log 文件中。 恢复期间会有进度条在终端中显示,当进度条前进到 100% 时,说明恢复已完成。

恢复完成后,会显示如下所示的信息:

[2022/09/20 18:02:12.540 +08:00] [INFO] [collector.go:67] ["Raw restore success summary"] [total-ranges=3] [ranges-succeed=3] [ranges-failed=0] [restore-files=3] [total-take=950.460846ms] [restore-data-size(after-compressed)=78.3MB] [total-kv=100000] [total-kv-size=108.7MB] [average-speed=114.4MB/s]

以上信息的解释如下:

  • total-ranges: 恢复任务切分成的分片个数, 与 ranges-succeed + ranges-failed 相等.
  • ranges-succeed: 成功分片的个数。
  • ranges-failed: 失败分片的个数。
  • restore-files: 执行恢复的文件个数。
  • total-take: 恢复时长。
  • total-kv: 恢复文件中键值对的个数。
  • total-kv-size: 恢复文件中键值对的大小。请注意,这是指压缩前的大小。
  • average-speed: 恢复速率,约等于 total-kv-size / total-take
  • restore-data-size(after-compressed): 恢复文件的大小。

备份文件的数据校验

TiKV-BR 可以在 TiKV 集群备份和恢复操作完成后执行 checksum 来确保备份文件的完整性和正确性。 checksum 可以通过 --checksum 来开启。

Checksum 开启时,备份或恢复操作完成后,会使用 client-gochecksum 接口来计算 TiKV 集群中有效数据的 checksum 结果,并与备份文件保存的 checksum 结果进行对比。

注意,当 TiKV 集群启用了 TTL,如果在备份或恢复过程中出现数据 TTL 过期,此时 TiKV 集群的 checksum 结果跟备份文件的 checksum 会不相同,因此无法在此场景中使用 checksum

备份恢复操作的安全性

TiKV-BR 支持在开启了 TLS 配置 的 TiKV 集群中执行备份和恢复操作,你可以通过设置 --ca--cert--key 参数来指定客户端证书。

性能

TiKV-BR 的备份和恢复都是分布式的,在存储和网络没有达到瓶颈的时候,性能可以随着 TiKV 节点数量线性提升。以下是 TiKV-BR 的性能测试指标,以供参考。

  • TiKV 节点:4 核 CPU, 8G 内存,v6.4.0
  • PD 节点:4 核 CPU, 8G 内存,v6.4.0
  • TiKV-BR 节点:4 核 CPU, 8G 内存,v1.1.0
  • 存储容量: 50TB
指标TiKV API v1TiKV API v2
备份速度每 TiKV 节点 40MB/s每 TiKV 节点 40MB/s
恢复速度每 TiKV 节点 70MB/s每 TiKV 节点 70MB/s
性能影响QPS 降低 20%,时延增加 20%QPS 降低 20%,时延增加 20%

性能调优

如果你希望减少备份对集群的影响,你可以开启 auto-tune 功能。开启该功能后,备份功能会在不过度影响集群正常业务的前提下,以最快的速度进行数据备份。详见自动调节
或者你也可以使用参数 --ratelimit 进行备份限速。