Clonare un cluster di database in un singolo server utilizzando un backup locale

Select a documentation version:

Questa pagina mostra come clonare manualmente un cluster di database in un singolo server utilizzando un backup locale.

I passaggi descritti in questa pagina presuppongono che il cluster di database Kubernetes di origine sia stato creato su Google Kubernetes Engine e che i dischi di backup siano dischi permanenti di Compute Engine. Si presuppone inoltre che il server singolo AlloyDB Omni di destinazione sia installato su una macchina virtuale (VM) Compute Engine.

Se utilizzi altri ambienti, consulta la documentazione pertinente per replicare questi passaggi nel tuo ambiente.

Il seguente flusso di lavoro spiega i passaggi di clonazione:

  1. Identifica le informazioni sul disco di backup, come il nome del volume permanente e l'handler del disco permanente di Compute Engine, per il disco di backup del cluster di database di origine.
  2. Monta il disco di backup del cluster di database di origine sul server di destinazione.
  3. Utilizza i comandi pgBackRest per verificare che sia possibile accedere ai backup di origine.
  4. Utilizza i comandi pgBackRest per ripristinare il backup nel cluster di database di destinazione.

Prima di iniziare

  • Assicurati di avere accesso al disco di backup in cui è archiviato il backup del cluster di database di origine.
  • Viene creato un cluster di database AlloyDB Omni di destinazione a server singolo. Per saperne di più sull'installazione di AlloyDB Omni su Kubernetes, consulta Installare AlloyDB Omni.
  • Assicurati di aver eseguito l'accesso al database come utente postgres.

Recupera le informazioni sul disco di backup di origine

Nell'ambito della procedura di ripristino, determina il nome della richiesta di volume permanente (PVC) del disco di backup per il cluster di database di origine. Le PVC vengono utilizzate in Kubernetes per gestire l'archiviazione permanente delle applicazioni.

I seguenti comandi di esempio consentono di determinare il nome del PV sottostante e l'handler del disco permanente di Compute Engine utilizzando il nome della PVC del disco di backup.

  1. Connettiti al cluster GKE in cui hai creato il cluster di database di origine AlloyDB Omni:

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

    Sostituisci quanto segue:

    • DB_CLUSTER_NAMESPACE: lo spazio dei nomi Kubernetes per questo backup. Deve corrispondere allo spazio dei nomi del cluster di database.

    • DB_CLUSTER_NAME: il nome di questo cluster di database, ad esempio my-db-cluster.

    Di seguito è riportata la risposta di esempio.

      backupdisk-al-fe8c-dbcluster-sample-0   Bound
      pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a   10Gi       RWO            standard-rwo   5d21h
      ```
  2. Utilizza il nome del disco di backup del passaggio precedente, ad esempio backupdisk-al-fe8c-dbcluster-sample-0, per trovare il nome del PV sottostante:

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

    Sostituisci quanto segue:

    • PVC_NAME: il nome della PVC del disco di backup dalla risposta nel passaggio precedente, ad esempio backupdisk-al-fe8c-dbcluster-sample-0.
  3. Trova l'handler del disco permanente di Compute Engine sottostante:

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

    Sostituisci quanto segue:

    • PV_NAME: il nome del PV del disco di backup dalla risposta nel passaggio precedente.

    Di seguito è riportata la risposta di esempio:

      projects/my-project/zones/us-central1-a/disks/pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3
  4. Esporta il nome del disco di backup come variabile utilizzata nelle sezioni successive:

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

Monta il disco di backup sul server di destinazione

Supponendo che il server di destinazione sia un server AlloyDB Omni installato su una macchina virtuale Compute Engine, monta il disco di backup sul server.

  1. Esegui il comando gcloud compute instances attach-disk per montare il disco:

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

    Sostituisci quanto segue:

    • GCE_INSTANCE_NAME: il nome dell'istanza in cui è installato il server di destinazione nella macchina virtuale Compute Engine.

    • GCE_ZONE: la zona in cui esiste l'istanza della macchina virtuale Compute Engine.

  2. Monta il disco di backup sul server di destinazione:

       lsblk
       mkdir -p /mnt/disks/backupdisk
       mount -o discard,defaults /dev/sdb /mnt/disks/backupdisk
  3. Aggiungi un montaggio di binding personalizzato al file dataplane.conf di AlloyDB Omni nella directory /var/alloydb/config:

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

Per saperne di più sui montaggi di binding in Docker, consulta Montaggi di binding.

  1. Riavvia il server di destinazione:

Docker

  docker restart CONTAINER_NAME

Sostituisci CONTAINER_NAME con il nome di un nuovo container AlloyDB Omni, ad esempio my-omni-1.

Podman

  podman restart CONTAINER_NAME

Sostituisci CONTAINER_NAME con il nome di un nuovo container AlloyDB Omni, ad esempio my-omni-1.

Aggiorna il file di configurazione pgBackRest

Aggiorna il file pgBackRest esistente nella directory del disco di backup con il nuovo percorso del repository.

  1. Nel server di destinazione, vai alla directory /mnt/disks/backupdisk:

      cd /mnt/disks/backupdisk
  2. Aggiorna il percorso pg1-path a una directory temporanea nel file pgbackrest.conf per evitare di sovrascrivere i dati esistenti. La directory data-restored viene creata automaticamente nell'ambito della procedura di ripristino:

      sudo sed -i 's|.*pg1-path.*|pg1-path=/mnt/disks/pgsql/data-restored|' pgbackrest.conf
  3. Aggiorna il percorso repo1-path a una directory temporanea nel file pgbackrest.conf:

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

Verifica i backup di origine nel cluster di database di destinazione

Accedi al server di destinazione ed esegui i comandi pgBackRest per verificare che i backup del cluster di database di origine siano accessibili sul server di destinazione:

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

Di seguito è riportata la risposta di esempio:

    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

I timestamp nella risposta vengono utilizzati per ripristinare il backup completo o per ripristinare da un momento specifico dalla finestra di ripristino.

Ripristina il backup nel server di destinazione

Dopo aver identificato il backup o un momento specifico da cui eseguire il ripristino, esegui i comandi pgBackRest nel server di destinazione. Per saperne di più su questi comandi, consulta Comando di ripristino.

Di seguito sono riportati alcuni comandi di ripristino pgBackRest di esempio:

  • Ripristina da un backup

    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
  • Ripristina da un momento specifico

    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

Copia i dati nel server di destinazione

Una volta completato correttamente il comando di ripristino, puoi copiare i dati dalla directory temporanea data-restored alla directory dei dati AlloyDB corrente.

  1. Nel server di destinazione, arresta il servizio di database:

    Docker

    docker stop CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
  2. Come best practice, rinomina la directory dei dati corrente con un altro nome:

      mv ~/alloydb-data/data  ~/alloydb-data/data-old
  3. Rinomina la directory temporanea data-restored nella directory dei dati corrente:

      mv ~/alloydb-data/data-restored ~/alloydb-data/data
  4. Aggiorna il valore pg1-path nel file postgresql.auto.conf per caricare i dati ripristinati:

        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. Nel server di destinazione, avvia il servizio di database:

    Docker

    docker start CONTAINER_NAME

    Podman

    podman start CONTAINER_NAME

Dopo l'avvio del servizio di database, puoi connetterti all'istanza principale ed eseguire query per verificare che i dati siano stati ripristinati dal backup. Per saperne di più, consulta Connettersi ad AlloyDB Omni su un singolo server.

Passaggi successivi