Cómo clonar un clúster de bases de datos en un solo servidor con una copia de seguridad local

En esta página, se muestra cómo clonar un clúster de bases de datos en un solo servidor con una copia de seguridad local.

En los pasos de esta página, se supone que el clúster de base de datos de Kubernetes de origen se crea en Google Kubernetes Engine y que los discos de copia de seguridad son discos persistentes de Compute Engine. También se supone que el servidor único de destino de AlloyDB Omni está instalado en una máquina virtual (VM) de Compute Engine.

Si usas otros entornos, consulta la documentación correspondiente para replicar estos pasos en tu entorno.

En el siguiente flujo de trabajo, se explican los pasos de clonación:

  1. Identifica la información del disco de copia de seguridad, como el nombre del volumen persistente y el controlador de disco persistente de Compute Engine, para el disco de copia de seguridad del clúster de la base de datos de origen.
  2. Activa el disco de copia de seguridad del clúster de la base de datos de origen en el servidor de destino.
  3. Usa los comandos pgBackRest para verificar que se pueda 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 al disco de copia de seguridad en el que se almacena la copia de seguridad del clúster de la base de datos de origen.
  • Se crea un clúster de base de datos de AlloyDB Omni de destino de un solo servidor. Para obtener más información sobre cómo instalar AlloyDB Omni en Kubernetes, consulta Cómo instalar AlloyDB Omni.
  • Asegúrate de haber accedido a la base de datos como el usuario postgres.

Obtén información del disco de copia de seguridad de origen

Como parte del proceso de restablecimiento, determina el nombre de la reclamación de volumen persistente (PVC) del disco de copia de seguridad para tu clúster de base de datos de origen. Los PVC se usan en Kubernetes para administrar el almacenamiento persistente de las aplicaciones.

Los siguientes comandos de muestra ayudan a determinar el nombre de PV subyacente y el controlador de disco persistente de Compute Engine con el nombre del PVC del disco de copia de seguridad.

  1. Conéctate al clúster de GKE en el que creaste el clúster de base de datos de origen de AlloyDB Omni:

     kubectl get pvc -n DB_CLUSTER_NAMESPACE | grep DB_CLUSTER_NAME | grep backupdisk

    Reemplaza lo siguiente:

    • DB_CLUSTER_NAMESPACE: El espacio de nombres de Kubernetes para esta copia de seguridad. Debe coincidir con el espacio de nombres del clúster de bases de datos.

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

    La siguiente es la respuesta de ejemplo.

      backupdisk-al-fe8c-dbcluster-sample-0   Bound
      pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a   10Gi       RWO            standard-rwo   5d21h
      ```
  2. Usa el nombre del disco de copia de seguridad del paso anterior, por ejemplo, backupdisk-al-fe8c-dbcluster-sample-0, para encontrar el nombre de PV subyacente:

      kubectl get pvc/PVC_NAME -n DB_CLUSTER_NAMESPACE -o jsonpath={.spec.volumeName}

    Reemplaza lo siguiente:

    • PVC_NAME: El nombre de PVC del disco de copia de seguridad de la respuesta del paso anterior, por ejemplo, backupdisk-al-fe8c-dbcluster-sample-0.
  3. Busca el controlador de disco persistente subyacente de Compute Engine:

      kubectl get pv/$PV_NAME -o json | jq -r .spec.csi.volumeHandle

    Reemplaza lo siguiente:

    • PV_NAME: Es el nombre del PV del disco de copia de seguridad de la respuesta del paso anterior.

    La siguiente es una respuesta de ejemplo:

      projects/my-project/zones/us-central1-a/disks/pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3
  4. Exporta el nombre del disco de copia de seguridad como una variable que se usará en las siguientes secciones:

      export BACKUP_DISK=pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3

Activa el disco de copia de seguridad en el servidor de destino

Si suponemos que el servidor de destino es un servidor AlloyDB Omni instalado en una máquina virtual de Compute Engine, activa el disco de copia de seguridad en el servidor.

  1. Ejecuta el comando gcloud compute instances attach-disk para activar el disco:

      gcloud compute instances attach-disk GCE_INSTANCE_NAME \
      --disk ${BACKUP_DISK} \
      --zone=$GCE_ZONE

    Reemplaza lo siguiente:

    • GCE_INSTANCE_NAME: Es el nombre de la instancia en la que se instaló el servidor de destino en la máquina virtual de Compute Engine.

    • GCE_ZONE: Es la zona en la que existe tu instancia de máquina virtual de Compute Engine.

  2. Activa el disco de copia de seguridad en el servidor de destino:

       lsblk
       mkdir -p /mnt/disks/backupdisk
       mount -o discard,defaults /dev/sdb /mnt/disks/backupdisk
  3. Agrega un montaje de vinculación personalizado al archivo dataplane.conf de AlloyDB Omni en el directorio /var/alloydb/config:

      PG_BIND_MOUNTS=/mnt/disks/backupdisk:/mnt/disks/backups:rshared

Para obtener más información sobre las vinculaciones de montaje en Docker, consulta Vinculaciones de montaje.

  1. Reinicia el servidor de destino:

Docker

  docker restart CONTAINER_NAME

Reemplaza CONTAINER_NAME por el nombre de un nuevo contenedor de AlloyDB Omni, por ejemplo, my-omni-1.

Podman

  podman restart CONTAINER_NAME

Reemplaza CONTAINER_NAME por el nombre de un nuevo contenedor de AlloyDB Omni, por ejemplo, my-omni-1.

Actualiza el archivo de configuración pgBackRest

Actualiza el archivo pgBackRest existente en el directorio del disco de copia de seguridad con la nueva ruta de acceso del repositorio.

  1. En el servidor de destino, ve al directorio /mnt/disks/backupdisk:

      cd /mnt/disks/backupdisk
  2. Actualiza la ruta de acceso pg1-path a un directorio temporal en el archivo pgbackrest.conf para evitar reemplazar los datos existentes. El directorio data-restored se crea automáticamente como parte del proceso de restablecimiento:

      sudo sed -i 's|.*pg1-path.*|pg1-path=/mnt/disks/pgsql/data-restored|' pgbackrest.conf
  3. Actualiza la ruta de acceso repo1-path a un directorio temporal en el archivo pgbackrest.conf:

      sudo sed -i 's|.*repo1-path.*|repo1-path=/mnt/disks/backups/repo|' conf.d/repo1-local-backupplan.conf

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

Accede al servidor de destino y 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 servidor de destino:

Docker

  sudo docker exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 info

Podman

  sudo podman exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/backups --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 servidor de destino

Después de identificar la copia de seguridad o el punto en el que deseas restablecer, ejecuta los comandos pgBackRest en el servidor 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=/mnt/disks/backups --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=/mnt/disks/backups --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info

Cómo copiar datos en el servidor de destino

Una vez que el comando de restablecimiento se complete correctamente, podrás copiar los datos del directorio temporal data-restored al directorio de datos actual de AlloyDB.

  1. En el servidor de destino, detén el servicio de base de datos:

    Docker

    docker stop CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
  2. Como práctica recomendada, cambia el nombre del directorio de datos actual a otro:

      mv ~/alloydb-data/data  ~/alloydb-data/data-old
  3. Cambia el nombre del directorio temporal data-restored al directorio de datos actual:

      mv ~/alloydb-data/data-restored ~/alloydb-data/data
  4. Actualiza el valor pg1-path en el archivo postgresql.auto.conf para cargar los datos restaurados:

        vim ~/alloydb-data/data/postgresql.auto.conf
        # Verify postgresql.auto.conf.
        # Do not edit this file manually!
        # It will be overwritten by the ALTER SYSTEM command.
        # Recovery settings generated by pgBackRest restore on 2024-03-13 20:47:11
        restore_command = 'pgbackrest --config-path=/mnt/disks/pgsql --pg1-path=/mnt/disks/pgsql/data --repo=1 --stanza=db archive-get %f "%p"'
        recovery_target = 'immediate'
        recovery_target_action = 'promote'
        recovery_target_timeline = 'current'
  5. En el servidor de destino, inicia el servicio de base de datos:

    Docker

    docker start CONTAINER_NAME

    Podman

    podman start CONTAINER_NAME

Después de que se inicie el servicio de la base de datos, 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 en un solo servidor.

¿Qué sigue?