pgBackRest für AlloyDB Omni einrichten

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite wird beschrieben, wie Sie Ihre Daten schützen, indem Sie AlloyDB Omni für die Verwendung mit pgBackRest konfigurieren, einem Open-Source-Datenbanksicherungsserver.

TDE-fähige Cluster unterstützen transparente Sicherungen und Wiederherstellungen mit pgBackRest. Sie müssen keine zusätzlichen Schritte ausführen. Weitere Informationen finden Sie unter TDE-fähigen Cluster erstellen.

Informationen zu Kubernetes finden Sie unter Sichern und Wiederherstellen in Kubernetes.

Weitere Informationen zu pgBackRest finden Sie in seinem Nutzerhandbuch.

Hinweis

Bevor Sie AlloyDB Omni für die Verwendung mit pgBackRest konfigurieren, müssen Sie die folgenden Voraussetzungen erfüllen:

Basiskonfiguration mit lokalen Sicherungen

Die Schritte in diesem Abschnitt führen Sie durch eine einfache Einrichtung von pgBackRest. Bei einfachen Konfigurationen sind keine geplanten Sicherungen möglich. Weitere Informationen finden Sie unter Geplante Sicherungen einrichten.

Da pgBackRest ein flexibles Drittanbieterprodukt ist, das mit AlloyDB Omni kompatibel ist, können Sie jeden dieser Schritte nach Bedarf an Ihre eigenen Anforderungen und Vorlieben anpassen.

Sicherungs-Volume in Ihrem Container bereitstellen

Aus organisatorischen Gründen empfehlen wir dringend, ein separates Volume für pgBackRest-Backups zu erstellen und bereitzustellen. So richten Sie ein neues Volume ein:

  1. Wenn Ihr Container ausgeführt wird, beenden und entfernen Sie ihn.

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Ersetzen Sie die folgende Variable:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.
  2. Erstellen Sie ein Sicherungsverzeichnis im Dateisystem Ihres Containers.

    Docker

    mkdir -p BACKUP_DIR
    

    Docker

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Ersetzen Sie die folgende Variable:

    • BACKUP_DIR: Hostverzeichnis, in dem Ihre Sicherungen gespeichert werden.
  3. Erstellen Sie den Container mit dem neuen Sicherungsvolume neu.

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Ersetzen Sie die folgenden Variablen:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.
    • NEW_PASSWORD: Das Passwort, das dem postgres-Nutzer des neuen Containers nach der Erstellung zugewiesen wurde. Beachten Sie, dass NEW_PASSWORD nur dann ein neues Passwort festlegt, wenn DATA_DIR ein neuer Speicherort ist.
    • DATA_DIR: Der Pfad des Hostverzeichnisses, in dem Ihre Daten gespeichert sind.
    • BACKUP_DIR: Hostverzeichnis, in dem Ihre Sicherungen gespeichert werden.
    • HOST_PORT: Der TCP-Port auf dem Hostcomputer, auf dem der Container seinen eigenen Port 5432 veröffentlichen soll. Wenn Sie auch den PostgreSQL-Standardport auf dem Hostcomputer verwenden möchten, geben Sie 5432 an.
  4. Machen Sie das Sicherungsverzeichnis in Ihrem Container für postgres lesbar.

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Ersetzen Sie die folgende Variable:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.

Lokale Sicherungen konfigurieren

pgBackRest erstellt für jede Sicherung Unterverzeichnisse und fügt eine Manifestdatei im Nur-Text-Format hinzu.

pgBackRest verwendet den Begriff „Stanza“, um die Konfiguration für einen PostgreSQL-Datenbankcluster zu bezeichnen. Der Strophenname ist beliebig und muss nicht mit dem Hostserver, dem PostgreSQL-Cluster oder dem Datenbanknamen übereinstimmen. In der pgBackRest-Dokumentation wird empfohlen, das Stanza nach der Funktion des Clusters zu benennen.

Im Repository werden Sicherungen gespeichert. pgBackRest unterstützt das Schreiben in mehr als ein Repository in einer bestimmten Stanza. Die meisten Konfigurationsparameter für Repositorys werden mit einem numerischen Wert indexiert. Beispiel: repo1-. Parameter, die sich auf PostgreSQL-Cluster beziehen, werden ebenfalls unabhängig indexiert. Parameter, die für den ersten PostgreSQL-Cluster in einem Stanza spezifisch sind, haben beispielsweise das Präfix pg1-.

pgBackRest verwendet eine Konfigurationsdatei namens pgbackrest.conf, die globale und stanzaspezifische Parameter enthält.

Um eine Konfigurationsdatei zum Sichern Ihres AlloyDB Omni-Clusters zu erstellen und zu initialisieren, erstellen Sie die Datei pgbackrest.conf im Host-seitigen Sicherungsverzeichnis, das Sie in Sicherungsvolume in Container einbinden oder Sicherungsverzeichnis erstellen erstellt haben.

[global]
# Paths (all mandatory):



repo1-path=/var/lib/postgresql/backups
spool-path=/var/lib/postgresql/backups/spool
lock-path=/var/lib/postgresql/backups


# Retention details:
repo1-retention-full=3
repo1-retention-full-type=count
repo1-retention-diff=16

# Force a checkpoint to start backup immediately:
start-fast=y

# Logging parameters:



log-path=/var/lib/postgresql/backups

log-level-console=info
log-level-file=info

# Recommended ZSTD compression:
compress-type=zst

# Other performance parameters:
archive-async=y
archive-push-queue-max=1024MB
archive-get-queue-max=256MB
archive-missing-retry=y

[global:archive-push]
process-max=2

[global:archive-get]
process-max=2

[omni]
pg1-user=postgres
pg1-socket-path=/tmp



pg1-path=/var/lib/postgresql/data


Einige Parameter sind obligatorisch, andere können bei Bedarf an Ihre spezifischen Anforderungen angepasst werden, z. B.:

  • repo1-path: Verzeichnisspeicherort, in den die Sicherungen geschrieben werden. Wir empfehlen einen Speicherort, der sowohl für den Hostserver als auch für den Container sichtbar ist.

  • log-path: Der Speicherort des Verzeichnisses, in das die Logdateien geschrieben werden. Wenn Sie die Logdateien an einen separaten Speicherort schreiben möchten, der nicht mit den Sicherungen selbst vermischt ist, passen Sie diesen Parameter an.

  • repo1-retention-full: Anzahl der Vollsicherungen, die beibehalten werden sollen.

  • repo1-retention-full-type: Gibt an, ob die Kundenbindung nach Anzahl oder Zeitraum (Tage) gemessen wird.

  • repo1-retention-diff: Anzahl der differenziellen Backups, die aufbewahrt werden sollen.

Weitere nicht kritische, aber empfohlene Parametereinstellungen, die mit AlloyDB Omni in der Konfigurationsdatei kompatibel sind, sind:

  • log-level-console: Protokollierungsstufe, die beim Ausführen von pgBackup-Befehlen auf dem Bildschirm (STDOUT) angezeigt wird. Sie können diesen Wert in der Konfigurationsdatei an Ihre Anforderungen anpassen oder mit dem Befehlszeilenargument --log-level-console überschreiben. Der Standardwert ist warn.

  • start-fast: Erzwingt einen Prüfpunkt, um die Sicherungen schnell zu starten. Der Standardwert ist n.

  • archive-async: WAL-Segmentdateien werden aus Leistungsgründen asynchron übertragen. Der Standardwert ist n.

  • process-max: Maximale Anzahl der Prozesse, die für die Komprimierung und Übertragung verwendet werden sollen. Dieser Wert wird normalerweise auf einem primären Cluster auf max_cpu/4 oder auf einem Stand-by-Cluster auf max_cpu/2 festgelegt. Der Standardwert ist 1.

  • compress-type: Der zu verwendende Komprimierungsalgorithmus. Der Standardwert ist gz.

Es gibt viele weitere pgBackRest-Konfigurationsparameter, die angepasst werden können. In dieser Dokumentation werden nur die Parameter behandelt, die für die AlloyDB Omni-Standardkonfiguration erforderlich sind, sowie einige empfohlene Parametereinstellungen. Eine vollständige Liste der Konfigurationsparameter finden Sie in der pgBackRest Configuration Reference.

Nach der Konfiguration von pgBackRest müssen die Ziel-Repositories, in die Back-ups geschrieben werden, initialisiert werden. Dazu wird die Strophe erstellt, die die in der Konfigurationsdatei festgelegten Parameter verwendet.

Führen Sie die folgenden Schritte aus, um Ihre Datenbank für Sicherungen zu konfigurieren:

  1. Erstellen Sie die Stanza mit dem Befehl stanza-create.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Ersetzen Sie die folgende Variable:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.
  2. Konfigurieren Sie Ihre Datenbank für Sicherungen.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Ersetzen Sie die folgenden Variablen:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.
  3. Starten Sie den Container neu.

    Docker

    docker restart CONTAINER_NAME
    

    Docker

    docker restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Ersetzen Sie die folgenden Variablen:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.
  4. Sicherungskonfiguration validieren

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Ersetzen Sie die folgenden Variablen:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.
  5. Führen Sie eine pgBackRest-Prüfung durch.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Ersetzen Sie die folgenden Variablen:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.

Sicherung durchführen

  1. Führen Sie eine Vollsicherung durch.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full backup
    

    Ersetzen Sie die folgenden Variablen:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.
  2. Führen Sie ein differenzielles Backup durch.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff backup
    

    Ersetzen Sie die folgenden Variablen:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.
  3. Berichtssicherungen

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Ersetzen Sie die folgenden Variablen:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.

Geplante Sicherungen einrichten

Wenn Sie geplante Sicherungen einrichten möchten, erstellen Sie einen Cronjob, der den Befehl pgbackrest backup so oft wie nötig ausführt. Weitere Informationen finden Sie unter Sicherung planen.

Benutzerdefinierte Konfiguration und Remote-Sicherungen

Nachdem Sie eine grundlegende Konfiguration eingerichtet haben, können Sie die Konfigurationsdatei mit den in der pgBackRest-Konfigurationsreferenz dokumentierten Optionen an Ihre Anforderungen und Vorlieben anpassen.

Dazu gehört die Angabe zusätzlicher Sicherungs-Repositories auf Remote-Computern oder in der Cloud. Wenn Sie mehrere Repositorys definieren, ist die standardmäßige Sicherungsmaßnahme von pgBackRest, gleichzeitig in alle zu schreiben.

pgBackRest unterstützt beispielsweise die Verwendung eines Cloud Storage-Bucket als Sicherungs-Repository mit einer Reihe von zugehörigen Konfigurationsoptionen. Im folgenden Abschnitt wird eine Möglichkeit zur Verwendung dieser Optionen beschrieben.

Beispielkonfiguration mit Cloud Storage

Die Schritte in diesem Abschnitt bauen auf der Konfigurationsdatei auf, die in Einfache Konfiguration mit lokalen Sicherungen vorgestellt wird. Diese Änderungen an der Datei definieren ein zweites Backup-Repository in einem Cloud Storage-Bucket, auf das über Identity and Access Management (IAM) zugegriffen wird.

Für den automatischen Authentifizierungsstil in diesem Beispiel muss ein AlloyDB Omni-Cluster auf einer Compute Engine-VM-Instanz ausgeführt werden. Wenn Sie AlloyDB Omni nicht auf einer Compute Engine-VM-Instanz ausführen, können Sie trotzdem eine Sicherung in einem Cloud Storage-Bucket erstellen. Verwenden Sie dazu eine andere Authentifizierungsmethode, z. B. einen Google Cloud Dienstkontoschlüssel, der im lokalen Dateisystem gespeichert ist.

Anhand der folgenden Schritte erweitern Sie die vorherige Konfigurationsdatei so, dass ein Cloud Storage-basiertes pgBackRest-Repository definiert wird:

  1. Konfigurieren Sie die Bucket-Berechtigungen, damit das Dienstkonto, das an Ihre VM-Instanz angehängt ist, in den Bucket schreiben kann. Dazu ist es erforderlich, dass die IAM-Rolle „Storage Object User“ für dieses Dienstkonto festgelegt ist.

  2. Fügen Sie diese Zeilen dem [global]-Abschnitt Ihrer pgbackrest.conf-Datei hinzu:

    # Cloud Storage access details:
    repo2-type=gcs
    repo2-gcs-key-type=auto
    repo2-storage-verify-tls=n
    
    # Cloud Storage bucket and path details:
    repo2-gcs-bucket=BUCKET_NAME
    repo2-path=PATH_IN_BUCKET
    
    # Cloud Storage backup retention parameters:
    repo2-retention-full=8
    repo2-retention-full-type=count
    

    Ersetzen Sie die folgende Variable:

    • BUCKET_NAME: Name des Cloud Storage-Buckets, in dem pgBackRest Sicherungen speichern soll.
    • PATH_IN_BUCKET: Verzeichnispfad im Cloud Storage-Bucket, in dem pgBackRest Sicherungen speichern soll.
  3. Initialisieren Sie den cloudbasierten Sicherungsspeicherort mit dem Befehl pgbackrest stanza-create:

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Ersetzen Sie die folgende Variable:

    • CONTAINER_NAME: Der Name, den Sie für Ihren Container verwendet haben.

Nachdem Sie das Backup-Repository in Ihrem Cloud Storage-Bucket mit dem Befehl pgbackrest stanza-create initialisiert haben, sichert pgBackRest möglicherweise an zwei Speicherorten:

  • Dem Speicherort im lokalen Dateisystem, der an anderer Stelle in der Konfigurationsdatei als repo1-path definiert ist. Dies ist der standardmäßige Standort, wenn --repo im Befehl pgbackrest nicht angegeben ist.

  • Dem Cloud Storage-Bucket, der mit den in diesem Beispiel eingerichteten repo2-gcs-bucket-Konfigurationsanweisungen definiert wird. Wenn Sie den Cloud Storage-Bucket verwenden möchten, geben Sie --repo=2 im Befehl pgbackrest an.

Nächste Schritte