备份和恢复

简介

提供基于存储的物理备份和恢复能力,以确保数据安全。支持手动触发备份,并恢复到新的实例。

操作步骤

CLI
Web 控制台

配置备份存储

# Example: Configure backup storage for instance 'my-pg-instance'
kubectl patch postgresql my-pg-instance -n my-namespace --type='merge' -p '
spec:
  backup:
    retainDay: 7
    storage:
      name: my-s3-config
      bucket: my-backup-bucket
      namespace: storage-namespace
'

创建备份

# Example: Create a backup named 'my-backup' for cluster 'my-pg-cluster'
cat <<EOF | kubectl create -f -
apiVersion: middleware.alauda.io/v1
kind: PostgresBackup
metadata:
  name: my-backup
  namespace: my-namespace
spec:
  cluster: my-pg-cluster
  executeNode: my-pg-cluster-0  # Optional: Specify the pod to execute the backup
EOF

查看备份状态

kubectl get postgresbackup <backup-name> -n <namespace> -o yaml

恢复数据库

cat <<EOF | kubectl create -f -
apiVersion: middleware.alauda.io/v1
kind: PostgresRestore
metadata:
  name: <restore-instance-name>
  namespace: <namespace>
spec:
  backupCluster:
    name: <backup-pg-cluster-name>
    uid: <backup-pg-cluster-uid>
    storage:
      name: <storage-name>
      namespace: <storage-namespace>
      bucket: <s3-bucket-name>
  targetCluster: |
    apiVersion: acid.zalan.do/v1
    kind: postgresql
    metadata:
      name: <new-instance-name>
      namespace: <new-instance-namespace>
    spec:
      enableExporter: true
      enablePgpool2: false
      numberOfInstances: 2
      postgresql:
        version: "16"
      resources:
        limits:
          cpu: "1"
          memory: 2Gi
        requests:
          cpu: "1"
          memory: 2Gi
      teamId: ACID
      volume:
        size: 20Gi
        storageClass: sc-topolvm
  timestamp: "2023-07-26T14:36:38+00:00"  # Point-in-time to restore
EOF

备份状态说明

备份状态字段说明:

字段说明
backupName备份文件名
clusterUid集群的唯一标识符
configBackupStorage备份存储配置
executeNode执行备份的节点
finishLsn备份结束时的 LSN 位置
finishTime备份完成时间
lastModified备份的最后修改时间
pgVersionPostgreSQL 版本
startLsn备份开始时的 LSN 位置
startTime备份开始时间
state备份状态

注意事项

  1. 必须先完成备份存储配置,然后才能创建备份。
  2. 恢复操作将创建一个新的 PostgreSQL 实例。
  3. 备份将在保留期到期后自动删除。
  4. 在恢复过程中,请勿对源集群执行写操作。
  5. 确保目标集群的 StorageClass 与源集群兼容。
  6. 在启动备份前,请确认有足够的存储空间可用。
  7. 定期测试恢复流程,以确保备份有效。
  8. 对敏感数据,建议启用备份加密。