pgBackRest für AlloyDB Omni einrichten

Wählen Sie eine Dokumentationsversion aus:

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

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

Weitere Informationen zu pgBackRest finden Sie im Nutzerhandbuch.

Hinweise

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 die grundlegende 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.

Sicherungsvolume in Ihrem Container bereitstellen

Aus organisatorischen Gründen empfehlen wir dringend, ein separates Volume für pgBackRest-Sicherungen zu erstellen und einzubinden. 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: Das Hostverzeichnis, in dem Ihre Sicherungen gespeichert werden.
  3. Erstellen Sie den Container mit dem neuen Sicherungs-Volume 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. Mit NEW_PASSWORD wird nur dann ein neues Passwort festgelegt, wenn DATA_DIR ein neuer Standort ist.
    • DATA_DIR: Der Pfad des Hostverzeichnisses, in dem Ihre Daten gespeichert sind.
    • DATA_DIR: Der Pfad des Hostverzeichnisses, in dem Ihre Daten gespeichert sind.
    • BACKUP_DIR: Das 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 enthält eine Manifestdatei im Nur-Text-Format.

pgBackRest verwendet den Begriff „Stanza“ für die Konfiguration eines PostgreSQL-Datenbankclusters. Der Strophenname ist beliebig und muss nicht mit dem Namen des Hostservers, des PostgreSQL-Clusters oder der Datenbank übereinstimmen. In der pgBackRest-Dokumentation wird empfohlen, die Stanza nach der Funktion des Clusters zu benennen.

In das Repository werden Sicherungen geschrieben. pgBackRest unterstützt das Schreiben in mehrere Repositorys in einer bestimmten Strophe. 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. Beispiel: pg1-

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

Wenn Sie eine Konfigurationsdatei zum Sichern Ihres AlloyDB Omni-Clusters erstellen und initialisieren möchten, erstellen Sie die Datei pgbackrest.conf im Host-seitigen Sicherungsverzeichnis, das Sie unter Sicherungsvolume in Container einbinden 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: Der Verzeichnispfad, 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 einem separaten Speicherort speichern möchten, der nicht mit den Sicherungen selbst vermischt ist, passen Sie diesen Parameter an.

  • repo1-retention-full: Anzahl der beizubehaltenden vollständigen Sicherungen.

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

  • repo1-retention-diff: Anzahl der beizubehaltenden differenziellen Sicherungen.

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) ausgegeben 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 asynchron übertragen, um die Leistung zu verbessern. Der Standardwert ist n.

  • process-max: Maximale Anzahl der Prozesse, die für die Komprimierung und Übertragung verwendet werden sollen. Diese Einstellung ist in der Regel auf max_cpu/4 in einem primären Cluster oder auf max_cpu/2 in einem Standby-Cluster 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 Standardkonfiguration von AlloyDB Omni erforderlich sind, sowie einige empfohlene Parametereinstellungen. Eine vollständige Liste der Konfigurationsparameter finden Sie in der pgBackRest Configuration Reference.

Nachdem Sie pgBackRest konfiguriert haben, müssen die Ziel-Repositories, in die Back-ups geschrieben werden, initialisiert werden. Dazu erstellen Sie die Strophe, 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 den Absatz 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. 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 erstellen

  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 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 auch die Angabe zusätzlicher Sicherungs-Repositories auf Remote-Computern oder in der Cloud. Wenn Sie mehrere Repositorys definieren, schreibt pgBackRest standardmäßig gleichzeitig in alle.

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 Back-ups beschrieben wird. Diese Änderungen an der Datei definieren ein zweites Sicherungs-Repository in einem Cloud Storage-Bucket, 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 eine Sicherung in einem Cloud Storage-Bucket erstellen. Verwenden Sie dazu eine andere Authentifizierungsmethode, z. B. einen Google Cloud Dienstkontoschlüssel Google Cloud , der im lokalen Dateisystem gespeichert ist.

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

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

  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 Back-ups speichern soll.
    • PATH_IN_BUCKET: Der Verzeichnispfad im Cloud Storage-Bucket, in dem pgBackRest Back-ups 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 Sicherungs-Repository in Ihrem Cloud Storage-Bucket mit dem Befehl pgbackrest stanza-create initialisiert haben, kann pgBackRest an bis zu zwei Speicherorten sichern:

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

  • 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