免费试用
作者:高斌
产品技术解读
2023-03-14

导读

现在,数据库已成为众多企业信息系统的核心,数据库的备份恢复能力至关重要。对于 TiDB 这样的分布式数据库而言,数据库存储数据量不断增加,备份恢复也面临着更多挑战。

Amazon Web Services (AWS) EBS 快照是一种数据备份技术,用于将 EBS 卷上的数据快速备份到云端。他山之石,可以攻玉,本文分享了 TiDB 运用 AWS EBS 快照技术实现备份恢复功能的原理和实践,以及如何解决传统数据库备份恢复特性无法克服的问题,让备份恢复特性向前迈进了坚实的一步。

备份恢复技术介绍

备份恢复对数据库产品来说是至关重要的,因为数据库是许多企业信息系统的核心部分,如果数据库出现问题或者数据丢失,将会对企业造成极大的损失。因此,备份恢复技术是用来保护数据库数据,确保在意外情况发生时能够尽快恢复数据库的正常运行。

传统数据库的备份恢复技术通常分为备份和恢复两部分。其中包含了全备和增量备份。全备就是将数据库的所有数据和日志文件都备份到一个指定的目录或者存储设备中。增量备份则是只备份数据库在上一次备份之后发生变化的数据和日志文件。

恢复技术则是将数据库恢复到一个指定的时间点的过程。通常,恢复技术需要将备份的数据和日志文件按照时间顺序进行恢复,以便保证数据库的一致性。

传统数据库备份恢复技术的主要优点是简单易用,但是也有很多问题,其中最主要的问题就是:

  1. 备份过程中可能会对数据库造成一定的影响
  2. 恢复时间也会受到数据量的影响,导致恢复时间较长(RTO 通常以小时甚至天为单位)

在数据库技术进入到分布式数据库时代后,随着数据库数据量的不断上升,上面的问题对用户的影响越来越大。

AWS EBS 快照技术介绍

Amazon Web Services (AWS) EBS 快照是一种数据备份技术,用于将 EBS 卷上的数据快速备份到云端。EBS 卷是 Amazon Elastic Block Store (EBS) 的一种存储设备,可以将其作为 Amazon Elastic Compute Cloud (EC2) 实例的持久化存储。

EBS 快照是一种增量备份技术,只备份在上一次备份之后发生变化的数据。因此,EBS 快照备份速度很快,并且备份的数据量也较小。

EBS 快照可以保存在 Amazon Simple Storage Service (S3) 中,可以在 S3 中的任何区域内进行存储。EBS 快照可以用来创建新的 EBS 卷,也可以用来创建 Amazon Machine Image (AMI)。

EBS 快照是一种非常有用的数据备份技术,可以帮助企业保护其重要数据,并且在数据丢失或损坏时进行快速恢复。

TiDB 如何利用 AWS EBS 快照技术进行数据库备份恢复

TiDB 如何利用 AWS EBS 快照技术进行数据库备份恢复.png

作为采用 raft 协议的 shared-nothing 架构的分布式数据库产品的典型代表,新一代的 TiDB 备份恢复特性创新性地利用了 EBS 快照技术,解决了传统数据库备份恢复特性无法克服的问题,让备份恢复特性向前迈进了坚实的一步。

TiDB 将数据存储在 EBS 卷上,当需要进行备份的时候,通过 TiDB Operator 向 backup contorller 发出备份的命令,产生相应的 Backup Worker,产生 TiKV 节点所对应的 EBS 卷的快照并保存到 S3 中。在恢复的时候,则通过备份时保存在 S3 上的元数据和 EBS 卷快照来将集群恢复到新的集群。

由于 EBS 快照是一种磁盘快照技术,只能够保证 EBS 自己的一致性,却无法保证数据库层面的一致性。而且在数据库事务层的处理上,同一个事务的数据,在经过 MVCC 版本编码以及 Raft 层处理后,数据落盘到不同的 TiKV 的 EBS 卷上,这些卷之间的一致性是 EBS 快照无法保证的。

无论在备份还是恢复过程中,如何确保备份的数据是一致的,以及如何将数据库基于 EBS 快照恢复到用户指定的时间点,并确保数据的一致性,是一个很大的挑战。

幸运的是,TiKV 维护了 region 级别的 resolved_ts,用来代表某一个 region leader 上最大能读到的一致性完整事务的时间,即 resolved_ts = max(resolved_ts, min(lock_cf.StartTS))。resolved_ts 能够保证任意时刻能读到当前 region 最大数据一致性的 ts. 同时 TiKV 会计算当前节点所有 region leader 上最小的 resolved_ts, 并主动汇报给 PD。PD 汇总集群所有 TiKV 一致性 TiKV resolved_ts, 得到集群级别 min_resolved_ts。

备份阶段

备份阶段.png

在备份阶段,BR 工具会首先从 PD 获得集群的全局一致性 min_resolved_ts ,之后停止副本的调度和 GC,并行调用 AWS 卷快照服务产生 TiKV 节点 EBS 卷快照并保存备份的元数据,之后恢复副本调度并记录元信息,最后备份结束。

恢复阶段

恢复阶段.png

BR 工具在接受到恢复请求之后,restore worker 会获取备份的元数据,其中包含集群拓扑信息以及备份时数据一致性的 min_resolved_ts。之后获取恢复目标集群的拓扑信息,以便确保是否开始恢复。Restore worker 会首先恢复集群的 PD 组件,之后根据备份的元数据挂载 TiKV 节点对应的 EBS 快照,接下来根据元数据中的一致性 min_resolved_ts 将集群恢复到一致的状态。

测试数据

在以下的内容中,我们会展示一组数据来说明该特性在备份和恢复方面的性能。

备份阶段

首先,EBS 卷快照备份阶段包含创建备份任务、停止调度、停止 GC、获取备份时间 backup_ts 以及卷快照, 其时间占比如下:

EBS 卷快照备份时间占比.png

由于创建 EBS 卷快照是并行的,因此整个备份的时间取决于耗时最久数据卷快照创建时间,与集群规模无关。下面的表格描述了 EBS 卷中数据该变量与备份时间的关系。

EBS 卷中数据变量与备份时间示意图.png

经过测试,备份过程对集群的 QPS 影响低于 3%。

恢复阶段

对于恢复阶段,由于 EBS 快照的恢复是并发执行的,整体恢复时间取决于恢复最慢的 TiKV 节点,与集群规模也没有很大的关系。基于我们的测试,对于一个 21TB 规模的 TiDB 集群(每个 TiKV 节点采用 1TB 的 EBS 卷), 可以在 15 分钟左右完成恢复。下面的表格包含了恢复过程中各个阶段的耗时:

恢复过程中各个阶段的耗时.png

对于各个恢复阶段的详细解释和更多测试数据,请参考 TiDB 文档:基于 EBS 卷快照备份恢复的性能介绍

未来规划

接下来,TiDB 的备份恢复特性会沿着基于存储快照技术这个方向继续发展,支持更多云厂商的磁盘快照能力,并以此为基础,发展出更多的高级备份恢复特性。