In diesem Dokument wird beschrieben, wie Sie einen Datenbankcluster in Kubernetes mithilfe einer lokalen Sicherung eines AlloyDB Omni-Datenbankclusters klonen.
In diesem Dokument werden die folgenden Annahmen getroffen:
- Die Quell- und Zieldatenbankcluster werden in der Google Kubernetes Engine erstellt und die Sicherungslaufwerke sind nichtflüchtige Compute Engine-Laufwerke.
- Die nichtflüchtigen Compute Engine-Speicher, die als Sicherungslaufwerk in der Datenbank verwendet werden, werden von anderen Datenbankclustern nicht verwendet.
So klonen Sie einen Datenbankcluster:
- Geben Sie die Informationen zum Sicherungslaufwerk an, z. B. den Namen des nichtflüchtigen Volumes und den nichtflüchtigen Speicher-Handler der Compute Engine für das Sicherungslaufwerk des Quelldatenbankclusters. Achten Sie darauf, dass Sie die Sicherungsfunktion für den Quelldatenbankcluster aktiviert haben und mindestens eine erfolgreiche Sicherung durchgeführt wurde. 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 für den Zugriff auf das Sicherungslaufwerk des Quelldatenbankclusters zu verwenden. - Erstellen und wenden Sie die Ressourcenmanifestdatei
DBCluster
auf dem Zieldatenbankcluster an. Dabei muss der ParameterlivenessProbe
deaktiviert und Informationen zum Sicherungslaufwerk hinzugefügt werden. - Prüfen Sie mit
pgBackRest
-Befehlen, ob auf die Quellsicherungen zugegriffen werden kann. - Verwenden Sie
pgBackRest
-Befehle, um die Sicherung im Zieldatenbankcluster wiederherzustellen.
Hinweise
- Sie benötigen Zugriff auf das Sicherungslaufwerk, auf dem das Back-up des Quelldatenbankclusters gespeichert ist.
- Das Sicherungslaufwerk des Quelldatenbankclusters muss am Zieldatenbankcluster bereitgestellt werden können. Weitere Informationen finden Sie unter Nichtflüchtige Volumes. Wenn das zugrunde liegende Speicher-Backend den Zugriff ReadOnlyMany (ROX) nicht unterstützt, achten Sie darauf, dass das Sicherungslaufwerk von keinem Pod im Quellcluster verwendet wird.
- Da das Quellsicherungslaufwerk auf dem Zieldatenbankcluster bereitgestellt ist, wird die Datei
pgBackRest.conf
unverändert wiederverwendet. - Sie müssen als Nutzer
postgres
in der Datenbank angemeldet sein.
Informationen zum Quelllaufwerk für die Sicherung abrufen
Legen Sie im Rahmen der Wiederherstellung den Namen des Persistent Volume Claim (PVC) für das Sicherungslaufwerk für Ihren Quelldatenbankcluster fest. 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 Speicher-Handler der Compute Engine ermitteln. In diesem Beispiel sind alle Sicherungslaufwerke nichtflüchtige Compute Engine-Laufwerke, auf die über die Laufwerk-Handler-ID von Compute Engine-VMs zugegriffen werden kann.
Stellen Sie eine Verbindung zum Zieldatenbankcluster her, um den PVC-Namen zu ermitteln:
kubectl get pvc -n DB_CLUSTER_NAMESPACE | grep DB_CLUSTER_NAME | grep backuprepodisk
Ersetzen Sie Folgendes:
DB_CLUSTER_NAMESPACE
: der Kubernetes-Namespace für diesen Sicherungsplan. Er muss mit dem Namespace des Datenbankclusters übereinstimmen.DB_CLUSTER_NAME
: der Name dieses Datenbankclusters, z. B.my-db-cluster
.
Hier ist eine Beispielantwort:
backuprepodisk-my-db-cluster-br-0 Bound pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a 10Gi RWO standard-rwo 5d21h
Verwenden 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 nichtflüchtigen Speicher-Handler der Compute Engine zu ermitteln: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:
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 ein nichtflüchtiges Volume erstellen
Erstellen Sie mit dem Namen des Laufwerk-Handlers eine PersistentVolume
-Ressource.
Erstellen Sie im Ziel-Kubernetes-Cluster 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 zu erstellenden
PersistentVolume
-Ressource.
- PV_NAME: Der Name der zu erstellenden
Wenden Sie die Manifestdatei an:
kubectl apply -f PV_FILENAME
Ersetzen Sie Folgendes:
- PV_FILENAME: der Name der
PersistentVolume
-Manifestdatei, die Sie im vorherigen Schritt erstellt haben.
- PV_FILENAME: der Name der
Zieldatenbankcluster erstellen
Erstellen Sie einen Datenbankcluster, indem Sie den Parameter livenessProbe
vorübergehend deaktivieren. Konfigurieren Sie den Parameter livenessProbe
nach Abschluss der Wiederherstellung 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_NAME
Ersetzen 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 Größe des Arbeitsspeichers pro Datenbankinstanz dieses Datenbankclusters. Wir empfehlen, 8 Gigabyte pro CPU festzulegen. Wenn Sie beispielsweise CPU_COUNT auf2
setzen, empfehlen wir,memory
auf16Gi
festzulegen.DATA_DISK_SIZE
: die Laufwerksgröße pro Datenbankinstanz, z. B.10Gi
.
Wenden Sie die Manifestdatei an:
kubectl apply -f DBCLUSTER_FILENAME
Ersetzen Sie Folgendes:
- DBCLUSTER_FILENAME: der Name der
DBCluster
-Manifestdatei, die Sie im vorherigen Schritt erstellt haben.
- DBCLUSTER_FILENAME: der Name der
Prüfen Sie mit dem Befehl kubectl describe
, ob die Datenbankclusterressource den Status READY
hat.
Quellsicherungen im Zieldatenbankcluster prüfen
Führen Sie pgBackRest
-Befehle aus, um zu prüfen, ob auf die Sicherungen des Quelldatenbankclusters auf dem Zieldatenbankcluster zugegriffen werden kann.
Suchen Sie in Ihrem 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 Cluster-Datenbank-Pods.
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.
Beenden Sie den Pod, bevor Sie die Konfigurationsdatei
pgBackRest
aktualisieren:supervisorctl.par stop postgres
Aktualisieren 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
Prü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 vollständige Sicherung wiederherzustellen oder um von einem bestimmten Zeitpunkt innerhalb des Wiederherstellungszeitraums wiederherzustellen.
Sicherung im Zieldatenbankcluster wiederherstellen
Nachdem Sie die Sicherung oder den Zeitpunkt ermittelt haben, zu dem Sie wiederherstellen möchten, führen Sie pgBackRest
-Befehle in Ihrem Zieldatenbankcluster aus. Weitere Informationen zu diesen Befehlen finden Sie unter Befehl „restore“.
Im Folgenden finden Sie einige Beispiele für pgBackRest
-Befehle zum Wiederherstellen:
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
-Vorgang 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 dem Back-up wiederhergestellt wurden. Weitere Informationen finden Sie unter Verbindung zu AlloyDB Omni herstellen, das auf Kubernetes ausgeführt wird.
Datenbankcluster konfigurieren
Nachdem Sie einen Datenbankcluster geklont haben, konfigurieren Sie die Datenbankcluster-Spezifikationen. Aktivieren Sie den Parameter livenessProbe
mit dem folgenden Befehl:
kubectl patch dbcluster DBCLUSTER_FILENAME --type merge -p '{"spec":{"primarySpec":{"availabilityOptions":{"livenessProbe":"Enabled"}}}}'