本页介绍了如何使用 AlloyDB Omni Kubernetes operator 备份和恢复 AlloyDB Omni 数据。这需要您具备使用清单文件和 kubectl
命令行工具更新 Kubernetes 集群的基本知识。如需详细了解如何在 Kubernetes 集群上安装和运行 AlloyDB Omni,请参阅在 Kubernetes 上安装 AlloyDB。
如需启用 AlloyDB Omni 连续备份和恢复功能,您必须为每个数据库集群创建备份方案。系统会根据 backupPlan
资源中定义的备份时间表进行备份。如果备份方案中未定义任何备份时间表,则系统会默认每天进行连续备份。您可以按秒级别恢复或克隆恢复时间范围内的任何时间戳的备份。
如需了解如何在非 Kubernetes 部署中备份和恢复 AlloyDB Omni 数据,请参阅为 AlloyDB Omni 设置 Barman 和为 AlloyDB Omni 设置 pgBackRest。
启用和安排备份
当您为数据库集群创建备份方案资源时,系统会启用持续备份功能。您必须为每个数据库集群创建一个 backupPlan
资源,才能为该集群启用持续备份功能。此备份方案资源定义了以下参数:
AlloyDB Omni operator 存储备份的位置。该目录可以位于 Kubernetes 集群本地,也可以位于 Cloud Storage 存储桶中。
用于设置多个备份时间表的选项,可自动创建
full
、incremental
和differential
备份。您可以随时暂停此时间表,包括在初始定义备份方案时。如果备份方案处于暂停状态,系统不会创建定期备份,但您仍然可以使用该方案手动创建备份。如果未指定任何备份时间表,则默认为“0 0 * * *”,即每天在本地时间午夜执行一次完整备份。
存储的备份的保留期限。最短可为 1 天,最长可为 90 天。默认值为 14。
您的数据库集群可以有多个备份方案,每个方案都有自己的名称和配置。如果您为数据库集群创建多个具有不同备份时间表的 backupPlan
资源,则必须为每个备份资源定义一个唯一的备份位置。
创建用于在本地存储备份的方案
如需启用本地存储的备份,请应用以下清单:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: BackupPlan
metadata:
name: BACKUP_PLAN_NAME
namespace: NAMESPACE
spec:
dbclusterRef: DB_CLUSTER_NAME
backupSchedules:
full: "FULL_CRON_SCHEDULE"
differential: "DIFF_CRON_SCHEDULE"
incremental: "INCR_CRON_SCHEDULE"
backupRetainDays: RETENTION_DAYS
paused: PAUSED_BOOLEAN
替换以下内容:
BACKUP_PLAN_NAME
:此备份方案资源的名称,例如backup-plan-1
。NAMESPACE
:此备份方案的 Kubernetes 命名空间。它必须与数据库集群的命名空间一致。DB_CLUSTER_NAME
:数据库集群的名称,您在创建集群时指定的名称。FULL_CRON_SCHEDULE
:用于创建包含所有数据且采用cron
格式的完整备份的备份时间表。例如,将其设为“0 0 * * 0”可在每周日 00:00 执行完整备份。DIFF_CRON_SCHEDULE
:用于创建最初为完整备份的备份的备份时间表。后续备份是差分备份,基于数据的中间更改(以cron
格式表示)进行备份。例如,将其设置为“0 22 * * 3”,即可在每周三 22:00 进行差分备份。INCR_CRON_SCHEDULE
:用于创建备份的时间表,其中包含与上次完整备份、差分备份或增量备份相比发生变化的数据。它采用cron
格式表示。例如,设置为“0 21 * * *”可在每天 21:00 执行增量备份。RETENTION_DAYS
:AlloyDB Omni Operator 保留此备份的天数。必须是介于1
到90
之间的整数。默认值为14
。PAUSED_BOOLEAN
:指定备份方案是否已暂停。请提供以下某个值:true
:备份会暂停,系统不会创建任何定期备份。false
:AlloyDB Omni Operator 会根据cronSchedule
指定的时间表创建备份。如果未明确设置为true
,则这是默认值。
默认值为
false
。
创建在 Cloud Storage 中存储备份的方案
如需启用存储在 Cloud Storage 上的备份,请按以下步骤操作:
创建 Cloud Storage 存储分区。记下您为此存储桶分配的名称,因为您在后续步骤中需要用到它。
创建服务账号,用于将备份添加到存储桶。
向服务账号授予
storage.objectAdmin
Identity and Access Management 角色。为服务账号创建密钥。这会将私钥下载到您的本地环境。
将下载的密钥文件重命名为
key.json
。创建包含私钥的 Kubernetes Secret:
kubectl create secret generic SECRET_NAME --from-file=KEY_PATH -n NAMESPACE
替换以下内容:
SECRET_NAME
:您要创建的 Kubernetes Secret 的名称,例如gcs-key
。KEY_PATH
:您在上一步中下载的key.json
文件的本地文件系统路径。NAMESPACE
:数据库集群的命名空间。
应用以下清单:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: BackupPlan metadata: name: BACKUP_PLAN_NAME namespace: NAMESPACE spec: dbclusterRef: DB_CLUSTER_NAME backupSchedules: full: "FULL_CRON_SCHEDULE" differential: "DIFF_CRON_SCHEDULE" incremental: "INCR_CRON_SCHEDULE" backupRetainDays: RETENTION_DAYS paused: PAUSED_BOOLEAN backupLocation: type: GCS gcsOptions: bucket: BUCKET_URL key: BACKUP_PATH secretRef: name: SECRET_NAME namespace: NAMESPACE
替换以下内容:
BACKUP_PLAN_NAME
:此备份方案资源的名称,例如backup-plan-1
。NAMESPACE
:此备份方案的 Kubernetes 命名空间。它必须与数据库集群的命名空间一致。DB_CLUSTER_NAME
:数据库集群的名称,您在创建集群时指定的名称。FULL_CRON_SCHEDULE
:用于创建包含所有数据且采用cron
格式的完整备份的备份时间表。例如,将其设为“0 0 * * 0”即可在每周日 00:00 执行完整备份。DIFF_CRON_SCHEDULE
:用于创建最初为完整备份的备份的备份时间表。后续备份是差分备份,基于数据的中间更改(以cron
格式表示)。例如,将其设置为“0 22 * * 3”,即可在每周三 22:00 进行差分备份。INCR_CRON_SCHEDULE
:用于创建备份的时间表,其中包含与上次完整备份、差分备份或增量备份相比发生变化的数据。它采用cron
格式表示。例如,设置为“0 21 * * *”可在每天 21:00 执行增量备份。RETENTION_DAYS
:AlloyDB Omni Operator 保留此备份的天数。必须是介于1
到90
之间的整数。默认值为14
。PAUSED_BOOLEAN
:指定备份方案是否已暂停。请提供以下某个值:true
:备份会暂停,系统不会创建任何定期备份。false
:AlloyDB Omni Operator 会根据cronSchedule
指定的时间表创建备份。如果未明确设置为true
,则这是默认值。
默认值为
false
。
BUCKET_URL
:您在上一步中创建的 Cloud Storage 存储桶的名称。这不是存储桶的完整网址;请勿在存储桶名称前面添加gs://
。BACKUP_PATH
:AlloyDB Omni operator 将备份写入 Cloud Storage 存储桶中目录的路径。路径必须是绝对路径,且以/
开头。SECRET_NAME
:您在上一步中为 Kubernetes Secret 选择的名称。
手动创建备份
您可以随时使用已应用于数据库集群的任何备份方案手动创建备份资源。AlloyDB Omni operator 会将所选备份方案的存储位置和保留期限应用于新的手动备份。
如需手动创建备份,请应用以下清单:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Backup
metadata:
name: BACKUP_NAME
namespace: NAMESPACE
spec:
dbclusterRef: DB_CLUSTER_NAME
backupPlanRef: BACKUP_PLAN_NAME
manual: true
physicalBackupSpec:
backupType: BACKUP_TYPE
替换以下内容:
BACKUP_NAME
:此备份的名称,例如backup-1
。NAMESPACE
:此恢复操作的 Kubernetes 命名空间。它必须与数据库集群的命名空间一致。BACKUP_PLAN_NAME
:此备份所属的备份方案资源的名称。该名称必须与您在创建备份方案时选择的名称一致。DB_CLUSTER_NAME
:数据库集群的名称,您在创建集群时指定的名称。BACKUP_TYPE
:指定您要创建的手动备份类型。请从下列值中选择一个:full
:创建包含所有数据的完整备份。diff
:创建基于上次完整备份的差分备份。后续备份是差分备份,基于数据的中间更改。incr
:创建增量备份,该备份依赖于上次完整备份或差分备份,以包含与上次完整备份或差分备份相比发生变化的数据。
监控和列出备份
您的备份计划和备份都是 Kubernetes 集群上的资源。如需查看它们的相关信息,请使用 kubectl
get
命令。
查看备份方案摘要
如需查看数据库集群备份方案的相关信息,请运行以下命令:
kubectl get backupplan.alloydbomni.dbadmin.goog -n NAMESPACE
将 NAMESPACE
替换为数据库集群的命名空间。
输出类似以下内容:
NAME PHASE LASTBACKUPTIME NEXTBACKUPTIME
backup-plan-prod Ready 2023-10-26T17:26:43Z 2023-10-27T00:00:00Z
查看备份列表
如需查看数据库集群可用的备份列表,请运行以下命令:
kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE
将 NAMESPACE
替换为数据库集群的命名空间。
输出类似以下内容:
NAME PHASE COMPLETETIME TYPE
backup-plan-prod-20231026172643 Succeeded 2023-10-26T17:26:53Z full
manual-backup-1 Succeeded 2023-10-26T18:15:27Z full
manual-backup-2 InProgress full
输出表中的每一行代表一个备份资源,具有以下属性:
- 备份的名称。
- 备份的状态,其中
Succeeded
表示备份已准备好进行恢复。 - 备份创建的时间戳。
使用备份进行恢复
借助 AlloyDB,您可以从单个备份恢复,也可以使用特定时间点的备份克隆集群。
从命名备份恢复
如需从备份恢复,将数据库集群中的数据替换为备份中的数据,请按以下步骤操作。
列出阶段为
Succeeded
的所有备份。kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE | grep Succeeded
将
NAMESPACE
替换为数据库集群的命名空间。如果至少存在一个合适的备份候选项,则输出内容如下所示:
backup-plan-prod-20231026172643 Succeeded 2023-10-26T17:26:53Z manual-backup-1 Succeeded 2023-10-26T18:15:27Z
选择上一步中列出的备份之一作为要恢复的备份。记下其名称,以便在下一步中使用。
应用以下清单:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: RESTORE_NAME namespace: NAMESPACE spec: sourceDBCluster: DB_CLUSTER_NAME backup: BACKUP_NAME
替换以下内容:
RESTORE_NAME:要与此清单创建的数据恢复资源搭配使用的名称,例如
restore-1
。DB_CLUSTER_NAME:数据库集群的名称,您在创建集群时指定的名称。
BACKUP_NAME:您在上一步中选择的备份的名称。
从某个时间点克隆集群
借助 AlloyDB Omni 运算符,您可以从恢复期内的任意时间点克隆集群的数据。恢复期限的长度直接由保留期限决定。
例如,如果您将保留期限设置为 14 天,则无法恢复超过 14 天的数据。您可以恢复到恢复期限内的任意时间点。 AlloyDB Omni operator 会将备份和日志保留比指定值多一天。
监控恢复期限,以确定恢复点:
kubectl get backupplan.alloydbomni.dbadmin.goog BACKUP_NAME -n NAMESPACE -o json | jq .status.recoveryWindow
以下显示了响应示例:
recoveryWindow: begin: "2024-01-31T02:54:35Z"
恢复资源中使用的是采用 RFC 3339 时间戳格式的时间戳值。
创建并应用以下恢复资源清单:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: RESTORE_NAME namespace: NAMESPACE spec: sourceDBCluster: DB_CLUSTER_NAME pointInTime: "DATE_AND_TIME_STAMP" clonedDBClusterConfig: dbclusterName: NEW_DB_CLUSTER_NAME
替换以下内容:
RESTORE_NAME:要与此清单创建的数据恢复资源搭配使用的名称,例如
restore-1
。DB_CLUSTER_NAME:数据库集群的名称,您在创建集群时指定的名称。
DATE_AND_TIME_STAMP:您要从中恢复的连续备份的 RFC 3339 时间戳(精确到分钟级),例如
2024-03-05T15:32:10Z
。NEW_DB_CLUSTER_NAME:新数据库集群的名称。
查看恢复状态
查看恢复操作的进度:
kubectl get restore.alloydbomni.dbadmin.goog -n NAMESPACE
将
NAMESPACE
替换为数据库集群的命名空间。如需持续运行该命令,请添加
-Aw
标志。输出类似以下内容:
NAME PHASE COMPLETETIME RESTOREDPOINTINTIME restore-1 RestoreInProgress
当输出表格中
PHASE
列的值读取为ProvisionSucceeded
时,恢复即完成。查看恢复或克隆的数据库集群上线的进度:
kubectl get dbclusters -A -n NAMESPACE
将
NAMESPACE
替换为数据库集群的命名空间。如需持续运行该命令,请添加
-Aw
标志。输出类似以下内容:
NAMESPACE NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE default db-cluster-1 10.128.0.55 Ready DBClusterReady
当输出表中
DBCLUSTERPHASE
列的值读取为DBClusterReady
时,则表示已恢复或克隆的数据库集群可以使用了。
删除备份
通常,您无需手动删除备份。AlloyDB Omni 运算符会自动删除保留期限超过您在创建备份方案时指定的时间的备份。
如果您确实想手动删除备份,则备份必须满足以下要求:
该备份并非其备份方案存储的唯一备份。AlloyDB Omni 运算符要求每个备份方案至少包含一个备份。
该备份没有其他备份依赖于它。例如,具有依赖于它的差分备份或增量备份的完整备份;或者具有依赖于它的差分备份的增量备份。
如需删除备份,请运行以下命令:
kubectl delete backup.alloydbomni.dbadmin.goog/BACKUP_NAME -n NAMESPACE
替换以下内容:
BACKUP_NAME
:要删除的备份的名称。NAMESPACE
:数据库集群的命名空间。
调整备份磁盘的大小
如需调整在 Kubernetes 集群中存储备份的本地磁盘的大小,请完成以下步骤:
更新 DBCluster 清单的
resources.disks
字段,如下所示:spec: primarySpec: resources: disks: - name: BACKUP_DISK size: 10Gi
将
BACKUP_DISK
替换为存储备份的磁盘的名称。应用清单以强制执行更新。
AlloyDB Omni operator 会立即将更新后的规范应用于您的 DBCluster。
修改正在运行的数据库集群的备份磁盘时,需要遵守以下限制:
- 只有在指定的
storageClass
支持卷扩展时,您才能增加磁盘的大小。 - 您不能减少磁盘的大小。
更新备份方案
每个备份方案都是一个 Kubernetes 资源。如需更新其配置,请执行以下操作之一:
修改并重新应用备份方案的清单文件。
使用
kubectl patch
命令。
例如,如需暂停正在运行的备份方案,请将其清单的 paused
属性更改为 true
,然后重新应用该清单。
删除备份方案
如需删除备份方案并移除其所有备份资源,请运行以下命令:
kubectl delete backupplan.alloydbomni.dbadmin.goog/BACKUP_PLAN_NAME -n NAMESPACE
替换以下内容:
BACKUP_PLAN_NAME
:要删除的备份方案的名称。NAMESPACE
:数据库集群的命名空间。
如需暂停备份方案而不删除它,请将备份方案资源的 paused
属性设置为 true
。已暂停的备份方案会继续存储备份,并允许手动创建备份。