基于 AWS EBS 卷快照的备份

本文介绍如何将 Kubernetes 上部署在 AWS Elastic Kubernetes Service (EKS) 的 TiDB 集群备份到 AWS S3。

本文使用的备份方式基于 TiDB Operator 的 Custom Resource Definition(CRD),底层使用 BR 获取集群数据,然后再将数据上传到 AWS 的存储上。BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。如果 TiDB 集群部署在 AWS EKS 上且使用了 EBS 卷,则可以使用本文描述的方法进行备份。

推荐使用场景以及限制

使用场景

如果你对数据备份有以下要求,可考虑使用 TiDB Operator 将 TiDB 集群数据以卷快照以及元数据的方式备份至 AWS S3:

  • 需要备份的影响降到最小,如备份对 QPS 和事务耗时影响小于 5%,不占用集群 CPU 以及内存。
  • 需要快速备份和恢复,比如 1 小时内完成备份,2 小时内完成恢复。

如有其他备份需求,参考备份与恢复简介选择合适的备份方式。

使用限制

备份操作

基于 AWS EBS 卷快照备份支持全量备份和增量备份。数据备份以 AWS EBS 卷快照方式进行,同一个节点的第一次备份为全量快照备份,后续备份自动以增量方式进行。EBS 快照备份通过创建一个自定义的 Backup custom resource (CR) 对象来描述一次备份。TiDB Operator 根据这个 Backup 对象来完成具体的备份过程。如果备份过程中出现错误,程序不会自动重试,此时需要手动处理。

本文档假设对部署在 Kubernetes test1 这个命名空间中的 TiDB 集群 demo1 进行数据备份,下面是具体操作过程。

第 1 步:准备 EBS 卷快照备份环境

  1. 下载文件 backup-rbac.yaml 到执行备份的服务器。

  2. 执行以下命令,在 test1 这个命名空间中,创建备份需要的 RBAC 相关资源:

    kubectl apply -f backup-rbac.yaml -n test1
  3. 授予远程存储访问权限。

    如果使用 Amazon S3 来备份集群数据并保存快照元数据,可以使用三种方式授予权限,请参考 AWS 账号授权

第 2 步:备份数据到 S3 存储

根据上一步选择的远程存储访问授权方式,你需要使用下面对应的方法将数据备份到 S3 的存储上:

  • 方法 1:如果通过 accessKey 和 secretKey 授权,你可以按照以下说明创建 Backup CR 备份集群数据:

    kubectl apply -f backup-aws-s3.yaml

    backup-aws-s3.yaml 文件内容如下:

    --- apiVersion: pingcap.com/v1alpha1 kind: Backup metadata: name: demo1-backup-s3 namespace: test1 spec: backupType: full backupMode: volume-snapshot br: cluster: demo1 clusterNamespace: test1 # logLevel: info s3: provider: aws secretName: s3-secret region: us-west-1 bucket: my-bucket prefix: my-folder
  • 方法 2:如果通过 IAM 绑定 Pod 的方式授权,你可以按照以下说明创建 Backup CR 备份集群数据:

    kubectl apply -f backup-aws-s3.yaml

    backup-aws-s3.yaml 文件内容如下:

    --- apiVersion: pingcap.com/v1alpha1 kind: Backup metadata: name: demo1-backup-s3 namespace: test1 annotations: iam.amazonaws.com/role: arn:aws:iam::123456789012:role/user spec: backupMode: volume-snapshot br: cluster: demo1 clusterNamespace: test1 # logLevel: info s3: provider: aws region: us-west-1 bucket: my-bucket prefix: my-folder
  • 方法 3:如果通过 IAM 绑定 ServiceAccount 的方式授权,你可以按照以下说明创建 Backup CR 备份集群数据:

    kubectl apply -f backup-aws-s3.yaml

    backup-aws-s3.yaml 文件内容如下:

    --- apiVersion: pingcap.com/v1alpha1 kind: Backup metadata: name: demo1-backup-s3 namespace: test1 spec: backupType: full backupMode: volume-snapshot serviceAccount: tidb-backup-manager br: cluster: demo1 clusterNamespace: test1 # logLevel: info s3: provider: aws region: us-west-1 bucket: my-bucket prefix: my-folder

在配置 backup-aws-s3.yaml 文件时,请参考以下信息:

  • 如果要基于卷快照进行备份,需在 spec.br.backupMode 中指定备份模式为 volume-snapshot
  • Amazon S3 的存储相关配置,请参考 S3 存储字段介绍
  • .spec.br 中存在一些可选参数,如 logLevel,可根据需要决定是否配置。

创建好 Backup CR 后,TiDB Operator 会根据 Backup CR 自动开始备份。你可以通过如下命令查看备份状态:

kubectl get bk -n test1 -o wide

删除备份的 Backup CR

备份完成后,你可能需要删除备份的 Backup CR。删除方法可参考删除备份的 Backup CR

故障诊断

在使用过程中如果遇到问题,可以参考故障诊断

文档内容是否有帮助?