Configuración de copias de seguridad y restauraciones continuas para el EDB Postgres servicio

Puede configurar EDB Postgres para permitir la copia de seguridad y la restauración con S3 almacenamiento.

Creación de una copia de seguridad con S3 almacenamiento

Puede crear una copia de seguridad de su instancia de base de datos en S3 almacenamiento.

  1. Establezca las variables de entorno siguientes:
    • Establezca la variable de entorno EDB_INSTANCE_NAME con el nombre de la instancia de base de datos para la que desea crear una copia de seguridad.
      export EDB_INSTANCE_NAME=<name>
    • Establezca la variable de entorno BACKUP_EDB_INSTANCE_NAME con el nombre de la instancia de la base de datos de copia de seguridad.
      export BACKUP_EDB_INSTANCE_NAME=<name>
    • Establezca la variable de entorno EDB_INSTANCE_TYPE en el tipo EDB Postgres de base de datos. Los valores válidos son Enterprise o Standard.
      export EDB_INSTANCE_TYPE=<EDBInstanceType>
  2. Cree un secreto con credenciales de acceso al S3 almacenamiento.
    kubectl create secret generic s3-creds \
      --from-literal=ACCESS_KEY_ID=<access key> \
      --from-literal=ACCESS_SECRET_KEY=<secret key>
    # --from-literal=ACCESS_SESSION_TOKEN=<session token> # if required
  3. Modifique y aplique su archivo YAML de recursos personalizados de la base de datos con la siguiente backup configuración bajo la spec clave:
    apiVersion: edb.cpd.ibm.com/v1
    kind: CPDEdbInstance
    metadata:
      name: ${EDB_INSTANCE_NAME}
    spec:
      type: ${EDB_INSTANCE_TYPE}
      imageRepository: "cp.stg.icr.io/cp/cpd"
      # Travis pipeline will insert here
      members: 1
      version: "12.9"
      blockStorageClass: nfs-client
      shutdown: false
      storageSize: 100Gi
      resources:
        requests:
          cpu: 1
          memory: 4Gi
        limits:
          cpu: 1
          memory: 4Gi
      backup:
        barmanObjectStore:
          destinationPath: <destination_path>
          endpointURL: <endpoint_url>
          s3Credentials:
            accessKeyId:
              key: ACCESS_KEY_ID
                name: <S3_secret_name>
                inheritFromIAMRole: false  
              secretAccessKey:
                key: ACCESS_SECRET_KEY
                name: <S3_secret_name>
  4. Ejecute el siguiente comando para aplicar una configuración de copia de seguridad:
    cat <<EOF | oc apply -n ${PROJECT_CPD_INST_OPERANDS} -f -
    apiVersion: postgresql.k8s.enterprisedb.io/v1
    kind: Backup
    metadata:
      name: ${BACKUP_EDB_INSTANCE_NAME}
        labels:
          icpdsupport/ignore-on-nd-backup: 'true'
          velero.io/exclude-from-backup: 'true'
          icpdsupport/addOnId: edb
        spec:
          cluster:
            name: ${EDB_INSTANCE_NAME}-edb-db
    EOF
  5. Comprueba que tu ubicación S3 de almacenamiento contiene una copia de seguridad de tu instancia. La copia de seguridad se ubicará en la ruta de destino con las carpetas wals y base correspondientes.

Restaurar a partir de una copia de seguridad

Puede restaurar datos desde una copia de seguridad de su instancia de base de datos que se encuentra en S3 almacenamiento.

  1. Asegúrese de que el secreto que creó al implementar la instancia de base de datos de respaldo exista en el espacio de nombres. Si no es así, tendrás que volver a crear el secreto. Asegúrate de que la configuración de la copia de seguridad se aplica a tu proyecto. Si no es así, deberá volver a aplicar la configuración de respaldo.
  2. Para restaurar su instancia de base de datos EDB desde una copia de seguridad almacenada en S3 storage, modifique y aplique la configuración de recursos personalizada de la siguiente manera:
    apiVersion: edb.cpd.ibm.com/v1
    kind: CPDEdbInstance
    metadata:
      name: ${EDB_INSTANCE_NAME}
    spec:
      type: ${EDB_INSTANCE_TYPE}
      imageRepository: "cp.stg.icr.io/cp/cpd"
      # Travis pipeline will insert here
      members: 1
      version: "12.9"
      blockStorageClass: nfs-client
      shutdown: false
      storageSize: 100Gi
      resources:
        requests:
          cpu: 1
          memory: 4Gi
        limits:
          cpu: 1
          memory: 4Gi
    
      recovery:
        source: ${EDB_INSTANCE_NAME}-edb-db
    
      externalClusters:
        - name: ${EDB_INSTANCE_NAME}-edb-db
          barmanObjectStore:
            destinationPath: <destination_path>
            # Replace with your S3 url
            endpointURL: <endpoint_url>
            s3Credentials:
              accessKeyId:
                key: ACCESS_KEY_ID
                name: <S3_secret_name>  
              secretAccessKey:
                key: ACCESS_SECRET_KEY
                name: <S3_secret_name>
            wal:
              maxParallel: 8