基于 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 小时内完成恢复。

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

使用限制

  • 要使用此功能,TiDB Operator 应为 v1.4.0 及以上,TiDB 应为 v6.3.0 及以上。
  • TiDB 集群部署在 EKS 上,且使用了 AWS EBS 卷。
  • 暂不支持 TiFlash、TiCDC、DM 和 TiDB Binlog 相关节点的卷快照备份。

备份操作

基于 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

故障诊断

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

下载 PDF文档反馈社区交流修改本文
文档内容是否有帮助?
产品
TiDB
学习
客户案例
PingCAP Education
TiDB in Action
© 2022 PingCAP. All Rights Reserved.