Datenbankcluster in Kubernetes mithilfe einer lokalen Sicherung klonen

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite wird beschrieben, wie Sie einen Datenbankcluster in Kubernetes mit einer lokalen Sicherung eines AlloyDB Omni-Datenbankclusters klonen.

Bei den Schritten auf dieser Seite wird davon ausgegangen, dass Ihre Quell- und Zieldatenbankcluster in Google Kubernetes Engine erstellt wurden und die Sicherungslaufwerke nichtflüchtige Compute Engine-Speicher sind. Außerdem wird davon ausgegangen, dass die nichtflüchtigen Compute Engine- Speicher, die als Sicherung in der Datenbank verwendet werden, nicht von anderen Datenbankclustern verwendet werden.

Im folgenden Workflow werden die Schritte zum Klonen erläutert:

  1. Ermitteln Sie die Informationen zum Sicherungslaufwerk, z. B. den Namen des nichtflüchtigen Volumes und den nichtflüchtigen Compute Engine-Speicher-Handler für das Sicherungslaufwerk des Quelldatenbankclusters.
  2. Erstellen Sie eine PersistentVolume-Ressource, um ein vorhandenes Sicherungslaufwerk im Zieldatenbankcluster zu verwenden, um auf das Sicherungslaufwerk des Quelldatenbankclusters zuzugreifen.
  3. Erstellen und wenden Sie die DBCluster-Ressourcenmanifestdatei im Zieldatenbankcluster an, wobei der Parameter livenessProbe deaktiviert und Informationen zum Sicherungslaufwerk hinzugefügt werden.
  4. Verwenden Sie pgBackRest-Befehle, um zu prüfen, ob auf Quellsicherungen zugegriffen werden kann.
  5. Verwenden Sie pgBackRest-Befehle, um die Sicherung im Zieldatenbankcluster wiederherzustellen.

Hinweis

  • Achten Sie darauf, dass Sie Zugriff auf das Sicherungslaufwerk haben, auf dem die Sicherung Ihres Quelldatenbankclusters gespeichert ist.
  • Das Sicherungslaufwerk des Quelldatenbankclusters muss im Zieldatenbankcluster eingebunden werden können. Weitere Informationen zu den Schritten, mit denen Sie sicherstellen können, dass Ihr Laufwerk eingebunden werden kann, finden Sie unter Nichtflüchtige Volumes.
  • Da das Quellsicherungslaufwerk im Zieldatenbankcluster eingebunden ist, wird die Datei pgBackRest.conf unverändert wiederverwendet.
  • Achten Sie darauf, dass Sie als Nutzer postgres in der Datenbank angemeldet sind.

Informationen zum Quellsicherungslaufwerk abrufen

Bestimmen Sie im Rahmen des Wiederherstellungsprozesses den Namen des Persistent Volume Claim (PVC) des Sicherungslaufwerks für Ihren Quelldatenbankcluster. PVCs werden in Kubernetes verwendet, um nichtflüchtigen Speicher für Anwendungen zu verwalten.

Mit den folgenden Beispielbefehlen können Sie den zugrunde liegenden PV-Namen und den nichtflüchtigen Compute Engine-Speicher-Handler finden. Im Beispiel sind alle Sicherungslaufwerke nichtflüchtige Compute Engine-Speicher, auf die über Compute Engine-VMs mit der Laufwerkshandler-ID zugegriffen werden kann.

  1. Stellen Sie eine Verbindung zu Ihrem Zieldatenbankcluster her, um den PVC-Namen zu finden:

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

    Ersetzen Sie Folgendes:

    • DB_CLUSTER_NAMESPACE: der Kubernetes-Namespace für diesen Sicherungsplan. Muss mit dem Namespace des Datenbankclusters übereinstimmen.

    • DB_CLUSTER_NAME: der Name dieses Datenbankclusters, z. B. my-db-cluster.

    Hier ist die Beispielantwort.

        backupdisk-al-fe8c-my-db-cluster-0   Bound
        pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a   10Gi       RWO            standard-rwo   5d21h
  2. Verwenden Sie den PVC-Namen des Sicherungslaufwerks aus dem vorherigen Schritt, z. B. backupdisk-al-fe8c-my-db-cluster-0, um den zugrunde liegenden PV-Namen und den nichtflüchtigen Compute Engine-Speicher-Handler zu finden:

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

    Ersetzen Sie Folgendes:

    • PVC_NAME: der PVC-Name des Sicherungslaufwerks aus der Antwort im vorherigen Schritt, z. B. backupdisk-al-fe8c-dbcluster-sample-0.
  3. Exportieren Sie die Konfigurationen basierend auf dem PV-Namen als Variablen, die in den folgenden Abschnitten verwendet werden sollen:

      export DISK_SIZE=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.capacity.storage}")
      export FS_TYPE=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.csi.fsType}")
      export VOLUME_HANDLER=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.csi.volumeHandle}")
      export STORAGE_CLASS=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.storageClassName}")

    Ersetzen Sie Folgendes:

    • PV_NAME: der PV-Name des Sicherungslaufwerks aus der Antwort im vorherigen Schritt.

Ressource für nichtflüchtiges Volume im Zieldatenbankcluster erstellen

Erstellen Sie mit dem Namen des Laufwerkshandlers eine PersistentVolume-Ressource.

  1. Erstellen Sie im Zieldatenbankcluster die Manifestdatei PersistentVolume:

        apiVersion: v1
        kind: PersistentVolume
        metadata:
          name: backupdisk
        spec:
          storageClassName: "${STORAGE_CLASS}"
          capacity:
            storage: "${DISK_SIZE}"
          accessModes:
            - ReadWriteOnce
          csi:
            driver: pd.csi.storage.gke.io
            volumeHandle: "${VOLUME_HANDLER}"
            fsType: "${FS_TYPE}"
    
  2. Wenden Sie die Manifestdatei an:

      kubectl apply -f PV_FILENAME

    Ersetzen Sie Folgendes:

    • PV_FILENAME: der Name der Manifestdatei PersistentVolume, die im vorherigen Schritt erstellt wurde.

Zieldatenbankcluster erstellen

Erstellen Sie einen Datenbankcluster, indem Sie den Parameter livenessProbe vorübergehend deaktivieren, während der Wiederherstellungsprozess abgeschlossen wird.

  1. Erstellen Sie die Manifestdatei 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:
            memory: 100Gi
            cpu: 10
            disks:
            - name: DataDisk
              size: 40Gi
            - name: BackupDisk
              size: ${DISK_SIZE}
              storageClass: ${STORAGE_CLASS}
              volumeName: backupdisk
    

    Ersetzen Sie Folgendes:

    • DB_CLUSTER_NAME: Der Name dieses Datenbankclusters, z. B. my-db-cluster.

    • ENCODED_PASSWORD: das Datenbank-Anmeldepasswort für die Standardnutzerrolle postgres, codiert als Base64-String, z. B. Q2hhbmdlTWUxMjM= für ChangeMe123.

  2. Wenden Sie die Manifestdatei an:

      kubectl apply -f DBCLUSTER_FILENAME

    Ersetzen Sie Folgendes:

    • DBCLUSTER_FILENAME: der Name der Manifestdatei DBCluster, die im vorherigen Schritt erstellt wurde.

Verwenden Sie den Befehl kubectl describe, um zu prüfen, ob die Datenbankclusterressource den Status READY hat.

Quellsicherungen im Zieldatenbankcluster überprüfen

Führen Sie pgBackRest-Befehle aus, um zu prüfen, ob die Sicherungen des Quelldatenbankclusters im Zieldatenbankcluster verfügbar sind.

  1. Suchen Sie im Zieldatenbankcluster nach den Pod-Details des Datenbankclusters:

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

    Die Antwort enthält den Namen des Datenbank-Pods des Clusters.

  2. Melden Sie sich im Datenbank-Pod an:

      kubectl exec -ti DATABASE_POD_NAME  -- /bin/bash

    Ersetzen Sie Folgendes:

    • DATABASE_POD_NAME : der Name des Datenbankcluster-Pods aus dem vorherigen Schritt.
  3. Beenden Sie den Pod, bevor Sie die Konfigurationsdatei pgBackRest aktualisieren:

      supervisorctl.par stop postgres
  4. Überprüfen Sie die Quellsicherungen im Datenbankcluster-Pod:

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

    Hier ist eine Beispielantwort:

      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
    

Die Zeitstempel in der Antwort werden entweder verwendet, um die Vollsicherung oder die Wiederherstellung zu einem bestimmten Zeitpunkt im Wiederherstellungszeitraum durchzuführen.

Sicherung im Zieldatenbankcluster wiederherstellen

Nachdem Sie die Sicherung oder den Zeitpunkt ermittelt haben, zu dem Sie die Wiederherstellung durchführen möchten, führen Sie pgBackRest-Befehle im Zieldatenbankcluster aus. Weitere Informationen zu diesen Befehlen finden Sie unter Restore-Befehl.

Im Folgenden finden Sie einige Beispiele für pgBackRest-Wiederherstellungsbefehle:

  • Aus einer Sicherung wiederherstellen

    pgbackrest --config-path=/backup --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
  • Von einem bestimmten Zeitpunkt wiederherstellen

    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

Pod neu starten

Nachdem der Wiederherstellungsbefehl erfolgreich abgeschlossen wurde, können Sie den postgres-Prozess starten.

supervisorctl.par start postgres

Nachdem der postgres-Prozess gestartet wurde, können Sie eine Verbindung zur primären Instanz herstellen und Abfragen ausführen, um zu prüfen, ob die Daten aus der Sicherung wiederhergestellt wurden. Weitere Informationen finden Sie unter Verbindung zu AlloyDB Omni in Kubernetes herstellen.

Nächste Schritte