TiDB:10 TB超大数据库每秒GB速度备份和还原

作为mysql数据的分布式大型集群替代,TiDB被越来越多企业在生产中使用。作为一个超大的数据库集群,对TB集合数据的备份和还原是一个难点和挑战。最近TiDB官方在4.0 RC版本中新增加了一个数据备份和还原工具BR,用来实现对超大规模(10TB)数据的高速备份和还原,可以将备份还原速度提高到1GB/s甚至更高。本文虫虫就给大家介绍这个高性能备份还原工具BR。

概述

TiDB是一个与MySQL高度兼容的开放源代码的NewSQL数据库,支持混合事务处理/分析处理(HTAP)工作负载。对于大型TiDB集群而言,备份和还原长期以来一直是一个具有挑战性的问题。由于数据分布在不同的节点中,因此TiDB没有一致的物理快照。

Mysdumpermyloader是MySQL数据中最常用的数据备份和还原工具。TiDB和MySQL协议兼容,所以TiDB中也使用他们进行备份和还原。但是对超大的TiDB集群mydumper不适用存在严重的短板:mydumper无法合理利用群集资源来提高备份速度。因此会严重影响应用程序请求甚至会导致TiDB的内存不足(OOM)错误。

根据实践中的测试数据。TiDB Loader恢复1 TB的数据大约需要19个小时。很明显,这样的速度不能满足日常数据高效恢复的需求。

因此,尽管可以使用mydumper和Loader做数据备份和恢复,但他们在对待大规模数据时候,已经完全不适应生产需求。因此,TiDB新引入了备份和还原工具BR。

主要原理

BR是用于快速分布式备份和还原TiDB群集数据的命令行工具。与mydumper和Loader相比,BR更适合于TB级别的大规模TiDB数据集。

TiDB的经典体系架构如下图

TiDB:10 TB超大数据库每秒GB速度备份和还原

在TiDB平台内部,主要组件如下:

TiDB Server是无状态SQL层。

TiKV服务器是数据持久化的分布式事务键值存储层。

Placement Driver(PD)是服务器管理群集。

数据备份

BR的主要实现:水平可伸缩性和强一致性

TiDB:10 TB超大数据库每秒GB速度备份和还原

1、执行数据备份命令时,会按顺序执行以下操作:

首先从 PD 获取相关元数据信息:

当前的 TS 作为备份快照的时间点

集群的 TiKV 节点信息

2、根据这些数据,在内部启动一个新实例,获取对应TS的数据库或表信息,过程中会忽略系统数据库information_schema,performance_schema和mysql。

3、备份子命令令根据需求执行如下操作:

全量备份:BR 遍历全部库表,并且根据这些表构建需要备份的 KV Range

单表备份:BR 根据该表构建需要备份的KV Range

4、最后,BR 将需要备份的KV Range收集后,构造完整的备份请求分发给集群内的 TiKV 节点。

数据恢复

TiDB:10 TB超大数据库每秒GB速度备份和还原

对数据库恢复,BR按顺序执行以下任务:

1、解析备份路径下的backupMeta文件,根据解析出来的库表信息,新创建一个实例在新集群创建对应的库表。

2、对解析出来的SST文件,进行表聚合。

3、根据Key Range进行预切分 Region,使得各个Region至少对应一个SST文件。

4、遍历要恢复的每一张表和其对应的SST文件。

5、找到Region,发送下载文件的请求到对应的TiKV节点,下载成功后,发送加载请求。

6、TiKV 收到加载SST文件的请求后,利用 Raft 机制保证加载 SST 数据的强一致性。

7、在加载成功后,下载下来的 SST 文件会被异步删除。

完成恢复操作后,BR会对恢复后的数据校验计算,和备份数据进行对比。

BR使用初步

BR命令是由子命令、选项和参数组成的。一个典型的命令如下:

br backup full --pd "${PDIP}:2379" -s "local:///tmp/backup"


子命令不带-和--的字符(如本例中的backup,full)。选项即以-或者--开头的字符(本例中的-s或者等效的—storage,--pd)。参数即子命令或选项字符后紧跟的、并传递给命令和选项的字符,一般要用引号括住(本例中的

常见子命令

BR 命令由多层构成。BR支持backup、restore 和 version 三个子命令:

backup 用于备份TiDB集群

restore 用于恢复TiDB集群

version 用于显示BR版本信息

以上三个子命令可能还包含下面的一些子命令:

full:可用于全库备份或恢。

db:可用于备份或恢复集群中的特定的数据库。

table:可用于备份或恢复集群中特定的单张表。

常用选项

--pd:用于连接的选项,表示PD服务地址。

-h/--help:获取所有命令和子命令的使用帮助。比如 br backup --help。

--ca:指定 PEM 格式的受信任CA的证书文件路径。

--cert:指定 PEM 格式的SSL证书文件路径。

--key:指定 PEM 格式的SSL证书密钥文件路径。

--status-addr:BR 向Prometheus提供统计数据的监听地址。

实例:

备份全部集群数据:

br backup full \\

--pd "${PDIP}:2379" \\

--storage "local:///tmp/backup" \\

--ratelimit 120 \\

--concurrency 4 \\

--log-file backupfull.log

所有集群数据会被备份到各自TiKV节点的 /tmp/backup 路径,同时备份的元数据文件backupmeta。--ratelimit 和 --concurrency 选项限制了每个TiKV执行备份任务的速度上限(单位 MiB/s)和并发数上限。--log-file 选项指定把 BR 的 log 写到 backupfull.log 文件中。

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

Full Backup 19.02%.

备份单个库

br backup db \\

--pd "${PDIP}:2379" \\

--db test \\

--storage "local:///tmp/backup" \\

--ratelimit 120 \\

--concurrency 4 \\

--log-file backuptable.log

备分单个表

br backup table \\

--pd "${PDIP}:2379" \\

--db test \\

--table usertable \\

--storage "local:///tmp/backup" \\

--ratelimit 120 \\

--concurrency 4 \\

--log-file backuptable.log

恢复操作

br restore full \\

--pd "${PDIP}:2379" \\

--storage "local:///tmp/backup" \\

--concurrency 128 \\

--log-file restorefull.log

官方基准测试(10TB)

官方提供了BR备份恢复的基准测试,其结果如下图所示

对10 TB数据的群集,BR能够以2.7 GB/s的平均速度(五个TiDB实例的平均548 MB/s)。测试期间的最大速度略高于4 GB/s,每个实例的最大备份速度在770 MB/s至866 MB/s之间。

对10 TB数据集群,恢复操作平均速度为0.7 GB/s,五个TiDB实例的平均速度为150 MB/s。在测试过程中,BR的最大存储速度约为1.2 GB/s,每个实例的最大恢复速度为247 MB​​/s至268 MB/s。

备份速度

备份了两个表。在下图中,绿色曲线代表所有TiKV实例的总体备份速度,其他曲线代表每个实例的备份速度。

TiDB:10 TB超大数据库每秒GB速度备份和还原

在11:15和11:28,备份索引数据。由于索引条目很短,因此备份速度会降低。

恢复速度

备份后,还原了两个表。绿色曲线代表总体还原速度,其他曲线代表每个TiKV实例的还原速度。

BR将还原任务分为多个子任务,然后按顺序执行这些子任务。这样我们可以看到图中的故障。它们可能是需要进一步优化的潜在问题。

TiDB:10 TB超大数据库每秒GB速度备份和还原

在1:00和1:15,将还原索引数据。因为索引条目很短,所以还原速度会降低。


分享到:


相關文章: