基于 AWS EBS 卷快照的恢复
本文介绍如何基于 AWS Elastic Block Store (EBS) 快照恢复 S3 上的备份数据到 TiDB 集群。
本文使用的恢复方式基于 TiDB Operator 的 Custom Resource Definition(CRD),底层使用 BR 进行数据恢复。BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。基于 AWS EBS 快照的备份包含两部分数据,TiDB 集群数据卷的快照,以及快照和集群相关的备份元信息。
使用限制
要使用此功能,TiDB Operator 应为 v1.4.0 及以上,TiDB 应为 v6.3.0 及以上。
只支持相同 TiKV 节点个数以及卷配置的恢复。即恢复集群 TiKV 个数以及卷相关的配置需要和备份集群的完全一致。
暂不支持 TiFlash, CDC,DM 和 binlog 相关节点的卷快照恢复
目前 restore 仅支持 gp3 默认配置 (3000IOPS/125 MB) 进行恢复, 如需其他配置可指定卷类型或者配置进行恢复,如:
--volume-type=io2
,--volume-iops=7000
,--volume-throughput=400
spec: backupType: full restoreMode: volume-snapshot serviceAccount: tidb-backup-manager toolImage: pingcap/br:v8.1.0 br: cluster: basic clusterNamespace: tidb-cluster sendCredToTikv: false options: - --volume-type=gp3 - --volume-iops=7000 - --volume-throughput=400
第 1 步:准备恢复环境
使用 TiDB Operator 将 S3 兼容存储上的备份元数据以及 EBS 快照恢复到 TiDB 之前,请按照以下步骤准备恢复环境。
下载文件 backup-rbac.yaml。
执行以下命令在
test2
这个命名空间中创建恢复需要的 RBAC 相关资源:kubectl apply -f backup-rbac.yaml -n test2授予远程存储访问权限。
如果要恢复的数据在 Amazon S3 上,可以使用三种方式授予权限,请参考 AWS 账号授权。
第 2 步:准备恢复的集群
参考在 AWS EKS 上部署 TiDB 集群 部署恢复数据的集群。
在 Spec 中加入 recoveryMode: true
字段。并执行以下命令在 test2
这个命名空间中创建恢复需要的 TiDB 集群相关资源:
kubectl apply -f tidb-cluster.yaml -n test2
第 3 步:将指定备份数据恢复到 TiDB 集群
根据第 1 步:准备恢复环境选择的远程存储访问授权方式,你需要使用下面对应的方法将备份数据恢复到 TiDB 集群:
方法 1:如果通过 accessKey 和 secretKey 授权,你可以按照以下说明创建
Restore
CR 恢复集群数据:kubectl apply -f restore-aws-s3.yamlrestore-aws-s3.yaml
文件内容如下:--- apiVersion: pingcap.com/v1alpha1 kind: Restore metadata: name: demo2-restore-s3 namespace: test2 spec: backupType: full restoreMode: volume-snapshot br: cluster: demo2 clusterNamespace: test2 # logLevel: info s3: provider: aws secretName: s3-secret region: us-west-1 bucket: my-bucket prefix: my-folder方法 2:如果通过 IAM 绑定 Pod 的方式授权,你可以按照以下说明创建
Restore
CR 恢复集群数据:kubectl apply -f restore-aws-s3.yamlrestore-aws-s3.yaml
文件内容如下:--- apiVersion: pingcap.com/v1alpha1 kind: Restore metadata: name: demo2-restore-s3 namespace: test2 annotations: iam.amazonaws.com/role: arn:aws:iam::123456789012:role/user spec: backupType: full restoreMode: volume-snapshot br: cluster: demo2 sendCredToTikv: false clusterNamespace: test2 # logLevel: info s3: provider: aws region: us-west-1 bucket: my-bucket prefix: my-folder方法 3: 如果通过 IAM 绑定 ServiceAccount 的方式授权,你可以按照以下说明创建
Restore
CR 恢复集群数据:kubectl apply -f restore-aws-s3.yamlrestore-aws-s3.yaml
文件内容如下:--- apiVersion: pingcap.com/v1alpha1 kind: Restore metadata: name: demo2-restore-s3 namespace: test2 spec: backupType: full restoreMode: volume-snapshot serviceAccount: tidb-backup-manager br: cluster: demo2 sendCredToTikv: false clusterNamespace: test2 # logLevel: info s3: provider: aws region: us-west-1 bucket: my-bucket prefix: my-folder
在配置 restore-aws-s3.yaml
文件时,请参考以下信息:
- 关于
restoreMode
字段的详细解释,请参考 BR 字段介绍。 - 关于兼容 S3 的存储相关配置,请参考 S3 存储字段介绍。
.spec.br
中的一些参数为可选项,如logLevel
。可根据需要决定是否配置。
创建好 Restore
CR 后,可通过以下命令查看恢复的状态:
kubectl get rt -n test2 -o wide
故障诊断
在使用过程中如果遇到问题,可以参考故障诊断。