本页介绍了如何使用 AlloyDB Omni 数据库集群的 Cloud Storage 备份在 Kubernetes 中克隆数据库集群。
以下工作流程介绍了克隆所用步骤:
- 在停用了
livenessProbe
参数的目标数据库集群上创建并应用DBCluster
清单文件。 - 创建并配置
pgbackrest.conf
文件以访问 Cloud Storage 备份。 - 使用
pgBackRest
命令验证您是否可以访问源备份。 - 使用
pgBackRest
命令将备份恢复到目标数据库集群。
准备工作
- 确保您有权访问存储源数据库集群备份的 Cloud Storage 存储桶的完整路径。此路径与您为源数据库集群创建
BackupPlan
资源时使用的路径相同。 - 创建目标 AlloyDB Omni 数据库集群。如需详细了解如何在 Kubernetes 上安装 AlloyDB Omni,请参阅创建数据库集群。
- 确保您已以
postgres
用户身份登录数据库。
在目标数据库集群中创建数据库集群
通过临时停用 livenessProbe
参数创建数据库集群。恢复完成后,重新配置 livenessProbe
参数。
创建
DBCluster
资源清单文件:apiVersion: v1 kind: Secret metadata: name: db-pw-DB_CLUSTER_NAME type: Opaque data: DB_CLUSTER_NAME: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: DB_CLUSTER_NAME spec: primarySpec: availabilityOptions: livenessProbe: "Disabled" adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: cpu: CPU_COUNT memory: MEMORY_SIZE disks: - name: DataDisk size: DISK_SIZE storageClass: standard
替换以下内容:
DB_CLUSTER_NAME
:此数据库集群的名称,例如my-db-cluster
。ENCODED_PASSWORD
:默认postgres
用户角色的数据库登录密码,编码为 base64 字符串,例如ChangeMe123
的Q2hhbmdlTWUxMjM=
。CPU_COUNT
:此数据库集群中每个数据库实例可用的 CPU 数量。MEMORY_SIZE
:此数据库集群中每个数据库实例的内存量。我们建议将此值设置为每个 CPU 8 千兆字节。例如,如果您在此清单中之前将cpu
设置为2
,我们建议将memory
设置为16Gi
。DISK_SIZE
:每个数据库实例的磁盘大小,例如10Gi
。
应用清单文件:
kubectl apply -f DBCLUSTER_FILENAME
替换以下内容:
- DBCLUSTER_FILENAME:在上一步中创建的
DBCluster
清单文件的名称。
- DBCLUSTER_FILENAME:在上一步中创建的
使用 kubectl describe
命令验证数据库集群资源是否处于 READY
状态。
配置 pgBackRest
文件
配置 pgBackRest
文件,以便目标数据库集群能够访问存储源备份的 Cloud Storage 存储桶。
在目标数据库集群中,找到数据库集群 pod 详细信息:
kubectl get pod -l "alloydbomni.internal.dbadmin.goog/dbcluster=<var>DB_CLUSTER_NAME</var>, alloydbomni.internal.dbadmin.goog/task-type=database"
响应包含集群数据库 pod 的名称。
登录 pod:
kubectl exec -ti DATABASE_POD_NAME -- /bin/bash
替换以下内容:
- DATABASE_POD_NAME:上一步中的数据库集群 Pod 的名称。
请先停止 pod,然后再更新
pgBackRest
配置文件:supervisorctl.par stop postgres
创建
pgBackRest
配置文件以访问存储在 Cloud Storage 中的备份:cat << EOF > /backup/pgbackrest.conf [db] pg1-path=/mnt/disks/pgsql/data pg1-socket-path=/tmp pg1-user=pgbackrest [global] log-path=/obs/pgbackrest log-level-file=info repo1-type=gcs repo1-gcs-bucket=GCS_SOURCE_BACKUP_BUCKET_NAME repo1-path=GCS_SOURCE_BACKUP_BUCKET_PATH repo1-storage-ca-file=/etc/ssl/certs/ca-certificates.crt repo1-retention-full=9999999 repo1-gcs-key-type=auto
替换以下内容:
GCS_SOURCE_BACKUP_BUCKET_NAME
:您在为源数据库集群创建BackupPlan
资源清单文件时创建的 Cloud Storage 存储桶的名称。这不是存储桶的完整网址;请勿在存储桶名称前面添加gs://
。GCS_SOURCE_BACKUP_BUCKET_PATH
:AlloyDB Omni 运维者将备份写入到源数据库集群的 Cloud Storage 存储桶中目录的路径。路径必须是绝对路径,且以/
开头。
repo1-gcs-key-type
设置为auto
,以使用实例的服务账号。如需详细了解其他选项,请参阅 GCS 代码库密钥类型选项。
验证目标数据库集群中的源备份
运行 pgBackRest
命令,验证目标数据库集群是否可以访问源数据库集群备份。
pgbackrest --config-path=/backup --stanza=db --repo=1 info
以下是示例响应:
stanza: db
status: ok
cipher: none
db (current)
wal archive min/max (15): 000000010000000000000002/00000001000000000000000D
full backup: 20240213-231400F
timestamp start/stop: 2024-02-13 23:14:00+00 / 2024-02-13 23:17:14+00
wal start/stop: 000000010000000000000003 / 000000010000000000000003
database size: 38.7MB, database backup size: 38.7MB
repo1: backup set size: 4.6MB, backup size: 4.6MB
incr backup: 20240213-231400F_20240214-000001I
timestamp start/stop: 2024-02-14 00:00:01+00 / 2024-02-14 00:00:05+00
wal start/stop: 00000001000000000000000D / 00000001000000000000000D
database size: 38.7MB, database backup size: 488.3KB
repo1: backup set size: 4.6MB, backup size: 84.2KB
backup reference list: 20240213-231400F
响应中的时间戳用于恢复完整备份,或从恢复期限内的时间点恢复。
在目标数据库集群中恢复备份
确定要恢复到的备份或时间点后,请在目标数据库集群中运行 pgBackRest
命令。如需详细了解这些命令,请参阅恢复命令。
以下是一些 pgBackRest
恢复命令示例:
使用备份进行恢复
pgbackrest --config-path=/backup --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
从某个时间点恢复
pgbackrest --config-path=/backup --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info
重启 pod
恢复命令成功完成后,您可以启动 postgres
进程。
supervisorctl.par start postgres
postgres
进程启动后,您可以连接到主实例并运行查询,以验证数据是否已从备份中恢复。如需了解详情,请参阅连接到在 Kubernetes 上运行的 AlloyDB Omni。
配置数据库集群
克隆数据库集群后,请配置数据库集群规范。最重要的是,别忘了使用以下命令启用 livenessProbe
参数:
kubectl patch dbcluster DBCLUSTER_FILENAME --type merge -p '{"spec":{"primarySpec":{"availabilityOptions":{"livenessProbe":"Enabled"}}}}'