Clona un clúster de bases de datos en Kubernetes con una copia de seguridad de Cloud Storage

En esta página, se muestra cómo clonar un clúster de bases de datos en Kubernetes con una copia de seguridad de Cloud Storage de un clúster de bases de datos de AlloyDB Omni.

En el siguiente flujo de trabajo, se explican los pasos que se usan para clonar lo siguiente:

  1. Crea y aplica el archivo de manifiesto DBCluster en el clúster de base de datos de destino con el parámetro livenessProbe inhabilitado.
  2. Crea y configura el archivo pgbackrest.conf para acceder a la copia de seguridad de Cloud Storage.
  3. Usa los comandos pgBackRest para verificar que puedes acceder a las copias de seguridad de origen.
  4. Usa los comandos pgBackRest para restablecer la copia de seguridad en el clúster de base de datos de destino.

Antes de comenzar

  • Asegúrate de tener acceso a la ruta de acceso completa del bucket de Cloud Storage en el que se almacena la copia de seguridad del clúster de la base de datos de origen. Esta es la misma ruta que usaste cuando creaste el recurso BackupPlan para tu clúster de bases de datos de origen.
  • Crea un clúster de base de datos de AlloyDB Omni de destino. Para obtener más información sobre la instalación de AlloyDB Omni en Kubernetes, consulta Crea un clúster de bases de datos.
  • Asegúrate de haber accedido a la base de datos como el usuario postgres.

Crea un clúster de base de datos en un clúster de base de datos de destino

Para crear un clúster de bases de datos, inhabilita temporalmente el parámetro livenessProbe. Una vez que finalice el restablecimiento, vuelve a configurar el parámetro livenessProbe.

  1. Crea el archivo de manifiesto de recursos 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
    

    Reemplaza lo siguiente:

    • DB_CLUSTER_NAME: Es el nombre de este clúster de bases de datos, por ejemplo, my-db-cluster.

    • ENCODED_PASSWORD: Es la contraseña de acceso a la base de datos del rol de usuario postgres predeterminado, codificada como una cadena base64, por ejemplo, Q2hhbmdlTWUxMjM= para ChangeMe123.

    • CPU_COUNT: Es la cantidad de CPUs disponibles para cada instancia de base de datos en este clúster de bases de datos.

    • MEMORY_SIZE: Es la cantidad de memoria por instancia de base de datos de este clúster de bases de datos. Te recomendamos que establezcas este valor en 8 gigabytes por CPU. Por ejemplo, si configuraste cpu como 2 antes en este manifiesto, te recomendamos que configures memory como 16Gi.

    • DISK_SIZE: El tamaño del disco por instancia de base de datos, por ejemplo, 10Gi.

  2. Aplica el archivo de manifiesto:

      kubectl apply -f DBCLUSTER_FILENAME

    Reemplaza lo siguiente:

    • DBCLUSTER_FILENAME: Es el nombre del archivo de manifiesto DBCluster que creaste en el paso anterior.

Usa el comando kubectl describe para verificar que el recurso del clúster de bases de datos esté en el estado READY.

Configura el archivo pgBackRest

Configura el archivo pgBackRest para permitir que el clúster de la base de datos de destino acceda al bucket de Cloud Storage en el que residen las copias de seguridad de origen.

  1. En el clúster de base de datos de destino, busca los detalles del pod del clúster de base de datos:

      kubectl get pod -l "alloydbomni.internal.dbadmin.goog/dbcluster=<var>DB_CLUSTER_NAME</var>, alloydbomni.internal.dbadmin.goog/task-type=database"

    La respuesta incluye el nombre del pod de la base de datos del clúster.

  2. Accede al pod:

      kubectl exec -ti DATABASE_POD_NAME  -- /bin/bash

    Reemplaza lo siguiente:

    • DATABASE_POD_NAME: Es el nombre del pod del clúster de bases de datos del paso anterior.
  3. Detén el pod antes de actualizar el archivo de configuración pgBackRest:

      supervisorctl.par stop postgres
  4. Crea un archivo de configuración pgBackRest para acceder a las copias de seguridad almacenadas en 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

    Reemplaza lo siguiente:

    • GCS_SOURCE_BACKUP_BUCKET_NAME: Es el nombre del bucket de Cloud Storage que creaste cuando creaste el archivo de manifiesto de recursos BackupPlan para el clúster de la base de datos de origen. Esta no es la URL completa del bucket. No agregues el prefijo gs:// al nombre del bucket.
    • GCS_SOURCE_BACKUP_BUCKET_PATH: Es la ruta de acceso al directorio en el que el operador de AlloyDB Omni escribe las copias de seguridad, dentro del bucket de Cloud Storage del clúster de la base de datos de origen. La ruta de acceso debe ser absoluta y comenzar con /.

    El repo1-gcs-key-type se establece en auto para usar la cuenta de servicio de la instancia. Para obtener más información sobre otras opciones, consulta Opción de tipo de clave del repositorio de GCS.

Verifica las copias de seguridad de origen en el clúster de la base de datos de destino

Ejecuta los comandos pgBackRest para verificar que se pueda acceder a las copias de seguridad del clúster de la base de datos de origen en el clúster de la base de datos de destino.

pgbackrest --config-path=/backup --stanza=db --repo=1 info

A continuación, se muestra una respuesta de ejemplo:

  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

Las marcas de tiempo de la respuesta se usan para restablecer la copia de seguridad completa o para restablecer desde un momento determinado de la ventana de recuperación.

Restablece la copia de seguridad en el clúster de base de datos de destino

Después de identificar la copia de seguridad o el momento al que deseas restablecer, ejecuta los comandos pgBackRest en el clúster de la base de datos de destino. Para obtener más información sobre estos comandos, consulta el comando de restauración.

Los siguientes son algunos comandos de restablecimiento de pgBackRest de ejemplo:

  • Restablecer copia de seguridad

    pgbackrest --config-path=/backup --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
  • Restablecer desde un punto determinado

    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

Reinicia el pod

Una vez que se complete correctamente el comando de restablecimiento, puedes iniciar el proceso de postgres.

supervisorctl.par start postgres

Después de que se inicie el proceso de postgres, puedes conectarte a la instancia principal y ejecutar consultas para verificar que los datos se restablezcan desde la copia de seguridad. Para obtener más información, consulta Cómo conectarse a AlloyDB Omni que se ejecuta en Kubernetes.

Configura el clúster de bases de datos

Después de clonar un clúster de bases de datos, configura las especificaciones del clúster. Lo más importante es que no olvides activar el parámetro livenessProbe con el siguiente comando:

    kubectl patch dbcluster DBCLUSTER_FILENAME --type merge -p '{"spec":{"primarySpec":{"availabilityOptions":{"livenessProbe":"Enabled"}}}}'

¿Qué sigue?