Cette page vous explique comment protéger vos données en configurant AlloyDB Omni pour qu'il fonctionne avec pgBackRest, un serveur de sauvegarde de base de données Open Source.
Pour en savoir plus sur Kubernetes, consultez la section Sauvegarder et restaurer dans Kubernetes.
Pour en savoir plus sur pgBackRest, consultez le guide de l'utilisateur.
Avant de commencer
Avant de configurer AlloyDB Omni pour qu'il fonctionne avec pgBackRest, effectuez les conditions préalables suivantes:
- Installez et exécutez AlloyDB Omni sur un serveur que vous contrôlez.
- Configurez le stockage de données persistant pour votre instance AlloyDB Omni.
Configuration de base avec sauvegardes locales
Les étapes de cette section vous guident tout au long d'une configuration de base de pgBackRest. Les configurations de base n'activent pas les sauvegardes planifiées. Pour en savoir plus, consultez la section Configurer des sauvegardes planifiées.
Étant donné que pgBackRest est un produit tiers flexible compatible avec AlloyDB Omni, vous pouvez modifier l'une de ces étapes en fonction de vos besoins et de vos préférences.
Installer un volume de sauvegarde sur votre conteneur
Pour des raisons d'organisation, nous vous recommandons vivement de créer et de monter un volume distinct pour les sauvegardes pgBackRest. Pour configurer un nouveau volume, procédez comme suit:
Si votre conteneur est en cours d'exécution, arrêtez-le et supprimez-le.
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
Remplacez la variable suivante :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Créez un répertoire de sauvegarde dans le système de fichiers de votre conteneur.
Docker
mkdir -p BACKUP_DIR
Docker
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
Remplacez la variable suivante :
BACKUP_DIR
: répertoire hôte dans lequel vos sauvegardes seront stockées.
Recréez votre conteneur avec le nouveau volume de sauvegardes.
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
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.NEW_PASSWORD
: mot de passe attribué à l'utilisateurpostgres
du nouveau conteneur après sa création. Notez queNEW_PASSWORD
ne définira un nouveau mot de passe que lorsqueDATA_DIR
est un nouvel emplacement.DATA_DIR
: chemin d'accès au répertoire hôte dans lequel vos données sont stockées.DATA_DIR
: chemin d'accès au répertoire hôte dans lequel vos données sont stockées.BACKUP_DIR
: répertoire hôte dans lequel vos sauvegardes seront stockées.HOST_PORT
: port TCP sur la machine hôte auquel le conteneur doit publier son propre port5432
. Pour utiliser également le port par défaut PostgreSQL sur la machine hôte, spécifiez5432
.
Rendez le répertoire de sauvegardes, dans votre conteneur, lisible par
postgres
.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
Remplacez la variable suivante :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Configurer des sauvegardes locales
pgBackRest crée des sous-répertoires pour chaque sauvegarde effectuée et inclut un fichier manifeste en texte brut.
pgBackRest utilise le terme "stanza" pour désigner la configuration d'un cluster de base de données PostgreSQL. Le nom de la strophe est arbitraire et n'a pas besoin de correspondre au nom du serveur hôte, du cluster PostgreSQL ou de la base de données. La documentation pgBackRest suggère de nommer la strophe d'après la fonction du cluster.
Le dépôt est l'emplacement où les sauvegardes sont écrites. pgBackRest permet d'écrire dans plusieurs dépôts dans une strophe donnée. La plupart des paramètres de configuration liés aux dépôts sont indexés avec une valeur numérique. Par exemple, repo1-
. Les paramètres liés aux clusters PostgreSQL sont également indexés indépendamment. Exemple : pg1-
.
pgBackRest utilise un fichier de configuration, appelé pgbackrest.conf
, pour contenir des paramètres globaux et spécifiques à la strophe.
Pour créer et initialiser un fichier de configuration permettant de sauvegarder votre cluster AlloyDB Omni, créez le fichier pgbackrest.conf
dans le répertoire de sauvegarde côté hôte que vous avez créé dans Installer un volume de sauvegarde sur votre conteneur.
[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
Certains paramètres sont obligatoires, mais d'autres peuvent être ajustés pour répondre à vos besoins spécifiques si nécessaire, par exemple:
repo1-path
: emplacement du répertoire dans lequel les sauvegardes sont écrites. Nous vous recommandons de choisir un emplacement visible à la fois par le serveur hôte et le conteneur.log-path
: emplacement du répertoire dans lequel les fichiers journaux sont écrits. Si vous souhaitez écrire les fichiers journaux dans un emplacement distinct, sans les mélanger aux sauvegardes elles-mêmes, ajustez ce paramètre.repo1-retention-full
: nombre de sauvegardes complètes à conserver.repo1-retention-full-type
: indique si la fidélisation est mesurée par nombre ou par période (en jours).repo1-retention-diff
: nombre de sauvegardes différentielles à conserver.
D'autres paramètres de paramètre non critiques, mais recommandés, compatibles avec AlloyDB Omni dans le fichier de configuration, sont les suivants:
log-level-console
: niveau de journalisation écrit à l'écran (STDOUT) lors de l'exécution des commandes pgBackup. Vous pouvez l'ajuster en fonction de vos besoins dans le fichier de configuration ou remplacer cette valeur par l'argument de ligne de commande--log-level-console
. La valeur par défaut estwarn
.start-fast
: force un point de contrôle pour démarrer rapidement les sauvegardes. La valeur par défaut estn
.archive-async
: transmettez les fichiers de segments WAL de manière asynchrone pour améliorer les performances. La valeur par défaut estn
.process-max
: nombre maximal de processus à utiliser pour la compression et le transfert. Ce paramètre est généralement défini surmax_cpu/4
sur un cluster principal ou surmax_cpu/2
sur un cluster de secours. La valeur par défaut est1
.compress-type
: algorithme de compression à utiliser. La valeur par défaut estgz
.
De nombreux autres paramètres de configuration pgBackRest existent et peuvent être ajustés. Cette documentation ne couvre que les paramètres obligatoires pour la configuration par défaut d'AlloyDB Omni et certains paramètres recommandés. Pour obtenir la liste complète des paramètres de configuration, consultez la documentation en ligne de la documentation de référence sur la configuration de pgBackRest.
Après avoir configuré pgBackRest, les dépôts cibles dans lesquels les sauvegardes sont écrites doivent être initialisés en créant la strophe, qui utilise les paramètres définis dans le fichier de configuration.
Pour configurer votre base de données pour les sauvegardes, procédez comme suit:
Créez la strophe à l'aide de la commande
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
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Configurez votre base de données pour les sauvegardes.
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;"
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Redémarrez votre conteneur.
Docker
docker restart CONTAINER_NAME
Docker
docker restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Validez la configuration de la sauvegarde.
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"
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Effectuez une vérification de pgBackRest.
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
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Effectuer une sauvegarde
Effectuez une sauvegarde complète.
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
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Effectuez une sauvegarde différentielle.
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
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Signaler des sauvegardes
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
Remplacez les variables suivantes :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Configurer des sauvegardes planifiées
Pour configurer des sauvegardes planifiées, créez une tâche cron qui exécute la commande pgbackrest backup
autant de fois que nécessaire. Pour en savoir plus, consultez la section Planifier une sauvegarde.
Configuration personnalisée et sauvegardes à distance
Une fois qu'une configuration de base fonctionne, vous pouvez ajuster votre fichier de configuration en fonction de vos besoins et de vos préférences à l'aide des options décrites dans la documentation de référence sur la configuration de pgBackRest.
Cela inclut la spécification de dépôts de sauvegarde supplémentaires situés sur des machines distantes ou dans le cloud. Si vous définissez plusieurs dépôts, pgBackRest les écrit simultanément en tant qu'action de sauvegarde par défaut.
Par exemple, pgBackRest permet d'utiliser un bucket Cloud Storage comme dépôt de sauvegarde, avec un certain nombre d'options de configuration associées. La section suivante montre comment utiliser ces options.
Exemple de configuration utilisant Cloud Storage
Les étapes de cette section s'appuient sur le fichier de configuration présenté dans la section Configuration de base avec des sauvegardes locales. Ces modifications de ce fichier définissent un deuxième dépôt de sauvegarde dans un bucket Cloud Storage, auquel on accède via la gestion de l'authentification et des accès (IAM).
Le style d'authentification automatique de cet exemple nécessite qu'un cluster AlloyDB Omni s'exécute sur une instance de VM Compute Engine. Si vous n'exécutez pas AlloyDB Omni sur une instance de VM Compute Engine, vous pouvez toujours effectuer une sauvegarde vers un bucket Cloud Storage à l'aide d'une autre méthode d'authentification, telle qu'une Google Cloud clé de compte de service enregistrée dans le système de fichiers local.
Pour étendre le fichier de configuration précédent afin de définir un dépôt pgBackRest basé sur Cloud Storage, procédez comme suit:
Configurez les autorisations du bucket pour autoriser le compte de service associé à votre instance de VM à écrire dans le bucket. Pour ce faire, vous devez définir le rôle IAM "Utilisateur des objets Storage" sur ce compte de service.
Ajoutez les lignes suivantes à la section
[global]
de votre fichierpgbackrest.conf
:# 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
Remplacez la variable suivante :
BUCKET_NAME
: nom du bucket Cloud Storage dans lequel vous souhaitez que pgBackRest stocke les sauvegardes.PATH_IN_BUCKET
: chemin d'accès au répertoire du bucket Cloud Storage dans lequel vous souhaitez que pgBackRest stocke les sauvegardes.
Initialisez l'emplacement de sauvegarde dans le cloud à l'aide de la commande
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
Remplacez la variable suivante :
CONTAINER_NAME
: nom que vous avez utilisé pour votre conteneur.
Une fois que vous avez initialisé le dépôt de sauvegarde dans votre bucket Cloud Storage à l'aide de la commande pgbackrest stanza-create
, pgBackRest peut effectuer des sauvegardes dans deux emplacements:
Emplacement dans le système de fichiers local, défini ailleurs dans le fichier de configuration sous la forme
repo1-path
. Il s'agit de l'emplacement par défaut lorsque--repo
n'est pas spécifié dans la commandepgbackrest
.Bucket Cloud Storage, défini à l'aide des directives de configuration
repo2-gcs-bucket
configurées par cet exemple. Pour utiliser le bucket Cloud Storage, spécifiez--repo=2
dans la commandepgbackrest
.