In diesem Dokument wird Folgendes vorausgesetzt:
- Ihre Quell- und Zieldatenbankcluster werden in der Google Kubernetes Engine erstellt und die Sicherungslaufwerke sind nichtflüchtige Compute Engine-Speicher.
- Die nichtflüchtigen Compute Engine- Speicher, die als Sicherungslaufwerk in der Datenbank verwendet werden, werden nicht von anderen Datenbankclustern verwendet.
Wenn Sie einen Datenbankcluster klonen, führen Sie die folgenden Schritte aus:
- Ermitteln Sie die Informationen zum Sicherungslaufwerk, z. B. den Namen des nichtflüchtigen Volumes und den Compute Engine-Handler für nichtflüchtige Speicher für das Sicherungslaufwerk des Quelldatenbankclusters. Achten Sie darauf, dass Sie die Sicherungsfunktion für den Quelldatenbankcluster aktiviert haben und dass mindestens eine erfolgreiche Sicherung vorhanden ist. Wenn diese Bedingungen nicht erfüllt sind, folgen Sie der Anleitung unter Sicherungen aktivieren und planen.
- Erstellen Sie eine
PersistentVolume-Ressource, um ein vorhandenes Sicherungslaufwerk im Zieldatenbankcluster zu verwenden, um auf das Sicherungslaufwerk des Quelldatenbankclusters zuzugreifen. - Erstellen und wenden Sie die
DBCluster-Ressourcenmanifestdatei im Zieldatenbankcluster an, wobei der ParameterlivenessProbedeaktiviert und Informationen zum Sicherungslaufwerk hinzugefügt werden. - Verwenden Sie
pgBackRest-Befehle, um zu prüfen, ob auf Quellsicherungen zugegriffen werden kann. - Verwenden Sie
pgBackRest-Befehle, um die Sicherung im Zieldatenbankcluster wiederherzustellen.
Hinweis
- Sie müssen 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 finden Sie unter Nichtflüchtige Volumes. Wenn das zugrunde liegende Speicher-Back-End den ReadOnlyMany-Zugriff (ROX) nicht unterstützt, achten Sie darauf, dass das Sicherungslaufwerk nicht von Pods im Quellcluster verwendet wird.
- Da das Quellsicherungslaufwerk im Zieldatenbankcluster eingebunden ist, wird die Datei
pgBackRest.confunverändert wiederverwendet. - Achten Sie darauf, dass Sie als Nutzer
postgresin der Datenbank angemeldet sind.
Informationen zum Quellsicherungslaufwerk abrufen
Ermitteln 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.
Die folgenden Beispielbefehle helfen Ihnen, den zugrunde liegenden PV-Namen und den Compute Engine-Handler für nichtflüchtige Speicher zu finden. Im Beispiel sind alle Sicherungslaufwerke nichtflüchtige Compute Engine-Speicher, auf die über Compute Engine-VMs mit der Handler-ID des Laufwerks zugegriffen werden kann.
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 backuprepodiskErsetzen 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.
backuprepodisk-my-db-cluster-br-0 Bound pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a 10Gi RWO standard-rwo 5d21hVerwenden Sie den PVC-Namen des Sicherungslaufwerks aus dem vorherigen Schritt, z. B.
backuprepodisk-my-db-cluster-br-0, um den zugrunde liegenden PV-Namen und den Compute Engine-Handler für nichtflüchtige Speicher zu finden:kubectl get pvc/PVC_NAME -n DB_CLUSTER_NAMESPACE -o jsonpath={.spec.volumeName}Ersetzen Sie Folgendes:
PVC_NAME: Der PVC-Name des Sicherungslaufwerks aus der Antwort im vorherigen Schritt, z. B.backuprepodisk-my-db-cluster-br-0.
Exportieren Sie die Konfigurationen basierend auf dem PV-Namen als Variablen, die in den folgenden Abschnitten verwendet werden sollen:
export BACKUP_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. Beispiel: „backupDiskVolume“.
Ressource für nichtflüchtiges Volume erstellen
Erstellen Sie mit dem Namen des Laufwerk-Handlers eine PersistentVolume-Ressource.
Erstellen Sie im Kubernetes-Zielcluster die Manifestdatei
PersistentVolume:apiVersion: v1 kind: PersistentVolume metadata: name: PV_NAME spec: storageClassName: "${STORAGE_CLASS}" capacity: storage: "${BACKUP_DISK_SIZE}" accessModes: - ReadWriteOnce csi: driver: pd.csi.storage.gke.io volumeHandle: "${VOLUME_HANDLER}" fsType: "${FS_TYPE}"Ersetzen Sie Folgendes:
- PV_NAME: Der Name der
PersistentVolume-Ressource, die erstellt wird.
- PV_NAME: Der Name der
Wenden Sie die Manifestdatei an:
kubectl apply -f PV_FILENAMEErsetzen Sie Folgendes:
- PV_FILENAME: Der Name der Manifestdatei
PersistentVolume, die im vorherigen Schritt erstellt wurde.
- PV_FILENAME: Der Name der Manifestdatei
Zieldatenbankcluster erstellen
Erstellen Sie einen Datenbankcluster, indem Sie den Parameter livenessProbe vorübergehend deaktivieren. Nach Abschluss der Wiederherstellung konfigurieren Sie den Parameter livenessProbe neu.
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: databaseVersion: "15.7.0" primarySpec: availabilityOptions: livenessProbe: "Disabled" adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: cpu: CPU_COUNT memory: MEMORY_SIZE disks: - name: DataDisk size: DATA_DISK_SIZE - name: BackupDisk size: ${BACKUP_DISK_SIZE} storageClass: ${STORAGE_CLASS} volumeName: PV_NAMEErsetzen Sie Folgendes:
DB_CLUSTER_NAME: Der Name dieses Datenbankclusters, z. B.my-db-cluster.ENCODED_PASSWORD: Das Datenbank-Anmeldepasswort für die Standardnutzerrollepostgres, codiert als Base64-String, z. B.Q2hhbmdlTWUxMjM=fürChangeMe123.CPU_COUNT: Die Anzahl der CPUs, die für jede Datenbankinstanz in diesem Datenbankcluster verfügbar sind.MEMORY_SIZE: Die Menge an Arbeitsspeicher pro Datenbankinstanz dieses Datenbankclusters. Wir empfehlen, diesen Wert auf 8 GB pro CPU festzulegen. Wenn Sie beispielsweise CPU_COUNT auf2festlegen, empfehlen wir,memoryauf16Gifestzulegen.DATA_DISK_SIZE: Die Laufwerkgröße pro Datenbankinstanz, z. B.10Gi.
Wenden Sie die Manifestdatei an:
kubectl apply -f DBCLUSTER_FILENAMEErsetzen Sie Folgendes:
- DBCLUSTER_FILENAME: Der Name der
DBClusterManifestdatei, die im vorherigen Schritt erstellt wurde.
- DBCLUSTER_FILENAME: Der Name der
Verwenden Sie den Befehl kubectl describe, um zu prüfen, ob sich die Datenbankclusterressource im Status READY befindet.
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.
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.
Melden Sie sich im Datenbank-Pod an:
kubectl exec -ti DATABASE_POD_NAME -- /bin/bashErsetzen Sie Folgendes:
- DATABASE_POD_NAME : Der Name des Datenbankcluster-Pods aus dem vorherigen Schritt.
Beenden Sie den Pod, bevor Sie die Konfigurationsdatei
pgBackRestaktualisieren:supervisorctl.par stop postgresAktualisieren Sie die Konfigurationsdatei
pgBackRest:cp /backup/pgbackrest.conf /backup/pgbackrest.conf.bak rm /backup/pgbackrest.conf cat << EOF > /backup/pgbackrest.conf [db] pg1-path=/mnt/disks/pgsql/data pg1-socket-path=/tmp pg1-user=pgbackrest[global] log-path=/backup/logs log-level-file=info EOFÜberprüfen Sie die Quellsicherungen im Datenbankcluster-Pod:
pgbackrest --config-path=/backup --stanza=db --repo=1 infoHier 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=infoVon 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 postgresNachdem 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.
Datenbankcluster konfigurieren
Nachdem Sie einen Datenbankcluster geklont haben, konfigurieren Sie die Spezifikationen des Datenbankclusters. Achten Sie darauf, dass Sie den Parameter livenessProbe mit dem folgenden Befehl aktivieren:
kubectl patch dbcluster DBCLUSTER_FILENAME --type merge -p '{"spec":{"primarySpec":{"availabilityOptions":{"livenessProbe":"Enabled"}}}}'