pgBackRest für AlloyDB Omni einrichten

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

Informationen zu Kubernetes finden Sie unter Daten in Kubernetes sichern und wiederherstellen.

Weitere Informationen zu pgBackRest finden Sie im Nutzerhandbuch.

Hinweise

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

Einfache Konfiguration mit lokalen Sicherungen

In den Schritten in diesem Abschnitt werden Sie durch die grundlegende Einrichtung von pgBackRest geführt. Bei einfachen Konfigurationen sind keine Sicherungen nach Zeitplan 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 entsprechend Ihren eigenen Anforderungen und Vorlieben anpassen.

Sicherungsvolume im Container bereitstellen

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

  1. Wenn der 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: 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 Standort ist.
    • DATA_DIR: Pfad zum Hostverzeichnis, in dem Ihre Daten gespeichert sind.
    • DATA_DIR: Pfad zum Hostverzeichnis, in dem Ihre Daten gespeichert sind.
    • BACKUP_DIR: Hostverzeichnis, in dem Ihre Sicherungen gespeichert werden.
    • HOST_PORT: TCP-Port auf dem Hostcomputer, unter 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 Verzeichnis „Sicherungen“ 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 enthält eine Manifestdatei im Klartext.

In pgBackRest wird der Begriff „Stanza“ für die Konfiguration eines PostgreSQL-Datenbankclusters verwendet. Der Name der Strophe ist beliebig und muss nicht mit dem Hostserver, dem PostgreSQL-Cluster oder dem Datenbanknamen übereinstimmen. In der pgBackRest-Dokumentation wird empfohlen, die Strophe nach der Funktion des Clusters zu benennen.

Im Repository werden die Sicherungen geschrieben. pgBackRest unterstützt das Schreiben in mehrere Repositories in einer bestimmten Strophe. Die meisten Konfigurationsparameter für Repositories sind mit einem numerischen Wert indexiert. Beispiel: repo1-. Parameter im Zusammenhang mit PostgreSQL-Clustern werden ebenfalls unabhängig voneinander indexiert. Beispiel: pg1-

pgBackRest verwendet eine Konfigurationsdatei namens pgbackrest.conf, um globale und stanzaspezifische Parameter zu speichern.

Wenn Sie eine Konfigurationsdatei für die Sicherung Ihres AlloyDB Omni-Clusters erstellen und initialisieren möchten, erstellen Sie die Datei pgbackrest.conf im hostseitigen Sicherungsverzeichnis, das Sie unter Sicherungsvolume auf dem Container bereitstellen 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: Directory-Speicherort, an 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: Directory-Speicherort, in den die Protokolldateien geschrieben werden. Wenn Sie die Protokolldateien an einem separaten Speicherort speichern möchten, der nicht mit den Sicherungen selbst zusammengeführt wird, passen Sie diesen Parameter an.

  • repo1-retention-full: Anzahl der vollständigen Sicherungen, die aufbewahrt werden sollen.

  • repo1-retention-full-type: Ob die Bindung nach Anzahl oder nach Zeitraum (Tagen) gemessen wird.

  • repo1-retention-diff: Anzahl der zu behaltenden differenziellen Sicherungen.

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

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

  • start-fast: Mit dieser Option wird ein Checkpoint erzwungen, um die Sicherungen schnell zu starten. Der Standardwert ist n.

  • archive-async: WAL-Segmentdateien werden aus Gründen der Leistung asynchron gesendet. Der Standardwert ist n.

  • process-max: Maximale Anzahl von Prozessen, die für die Komprimierung und Übertragung verwendet werden sollen. Dieser Wert ist in der Regel auf max_cpu/4 für einen primären Cluster oder auf max_cpu/2 für einen Standby-Cluster festgelegt. Der Standardwert ist 1.

  • compress-type: Zu verwendender Komprimierungsalgorithmus. Der Standardwert ist gz.

Es gibt viele weitere pgBackRest-Konfigurationsparameter, die angepasst werden können. Diese Dokumentation deckt nur die für die Standardkonfiguration von AlloyDB Omni erforderlichen Parameter und einige empfohlene Parametereinstellungen ab. Eine vollständige Liste der Konfigurationsparameter finden Sie in der Onlinedokumentation pgBackRest Configuration Reference.

Nachdem Sie pgBackRest konfiguriert haben, müssen Sie die Zielrepositories, in die Sicherungen geschrieben werden, initialisieren. Dazu erstellen Sie die Strophe, in der die in der Konfigurationsdatei festgelegten Parameter verwendet werden.

So konfigurieren Sie Ihre Datenbank für Sicherungen:

  1. Erstellen Sie die Strophe 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 folgenden Variablen:

    • 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. Validieren Sie die Sicherungskonfiguration.

    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 ausführen

  1. Führen Sie eine vollständige Sicherung 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 eine differenzielle Sicherung 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. Sicherungen melden

    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 funktionierende Basiskonfiguration haben, können Sie die Konfigurationsdatei mithilfe der in der Konfigurationsreferenz für pgBackRest beschriebenen Optionen an Ihre Anforderungen und Vorlieben anpassen.

Dazu gehört auch die Angabe zusätzlicher Sicherungsspeicherorte auf Remote-Computern oder in der Cloud. Wenn Sie mehrere Repositories definieren, schreibt pgBackRest bei der Standardsicherungsaktion gleichzeitig in alle.

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

Beispielkonfiguration mit Cloud Storage

Die Schritte in diesem Abschnitt bauen auf der Konfigurationsdatei auf, die im Abschnitt Grundlegende Konfiguration mit lokalen Sicherungen vorgestellt wurde. Durch diese Änderungen an dieser Datei wird ein zweites Sicherungsverzeichnis in einem Cloud Storage-Bucket definiert, auf das über Identity and Access Management (IAM) zugegriffen wird.

Für die automatische Authentifizierung 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 mit einer anderen Authentifizierungsmethode, z. B. einem Google Cloud Dienstkontoschlüssel, der im lokalen Dateisystem gespeichert ist, eine Sicherung in einem Cloud Storage-Bucket erstellen.

So erweitern Sie die vorherige Konfigurationsdatei, um ein Cloud Storage-basiertes pgBackRest-Repository zu definieren:

  1. Konfigurieren Sie die Bucket-Berechtigungen, damit das mit Ihrer VM-Instanz verknüpfte Dienstkonto in den Bucket schreiben kann. Dazu muss für dieses Dienstkonto die IAM-Rolle „Storage Object User“ festgelegt sein.

  2. Fügen Sie dem Abschnitt [global] Ihrer pgbackrest.conf-Datei die folgenden Zeilen 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 Sicherungsort 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 Sicherungsverzeichnis in Ihrem Cloud Storage-Bucket mit dem Befehl pgbackrest stanza-create initialisiert haben, kann pgBackRest an zwei Speicherorten sichern:

  • Speicherort im lokalen Dateisystem, der in der Konfigurationsdatei an anderer Stelle als repo1-path definiert ist. Dies ist der Standardspeicherort, wenn --repo im Befehl pgbackrest nicht angegeben wurde.

  • Cloud Storage-Bucket, definiert mit den repo2-gcs-bucket-Konfigurationsanweisungen, die in diesem Beispiel eingerichtet wurden. Wenn Sie den Cloud Storage-Bucket verwenden möchten, geben Sie --repo=2 in den Befehl pgbackrest ein.

Nächste Schritte