Pour en savoir plus sur Kubernetes, consultez Sauvegarder et restaurer dans Kubernetes.
Pour en savoir plus sur pgBackRest, consultez son guide de l'utilisateur.
Avant de commencer
Avant de configurer AlloyDB Omni pour qu'il fonctionne avec pgBackRest, remplissez les conditions préalables suivantes :
- Installez et exécutez AlloyDB Omni sur un serveur que vous contrôlez.
- Configurez un 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 de la configuration de base de pgBackRest. Les configurations de base n'activent pas les sauvegardes planifiées. Pour en savoir plus, consultez Configurer des sauvegardes planifiées.
pgBackRest est un produit tiers flexible compatible avec AlloyDB Omni. Vous pouvez donc modifier ces étapes en fonction de vos besoins et 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 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 sauvegarde.
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 siDATA_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 sur lequel le conteneur doit publier son propre port5432
. Pour utiliser également le port PostgreSQL par défaut sur la machine hôte, spécifiez5432
.
Rendez le répertoire de sauvegarde de 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 les 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 bases 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'endroit où les sauvegardes sont écrites. pgBackRest permet d'écrire dans plusieurs dépôts d'une même strophe. 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 de manière indépendante. Exemple : pg1-
.
pgBackRest utilise un fichier de configuration, appelé pgbackrest.conf
, pour stocker les paramètres globaux et spécifiques aux stanzas.
Pour créer et initialiser un fichier de configuration pour la sauvegarde de 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 Monter 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, comme les suivants :
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 par 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, et non 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 le nombre ou la période (en jours).repo1-retention-diff
: nombre de sauvegardes différentielles à conserver.
Les autres paramètres non critiques, mais recommandés, qui sont compatibles avec AlloyDB Omni dans le fichier de configuration incluent 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
: Envoie les fichiers 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. Il 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 AlloyDB/Omni par défaut et certains paramètres recommandés. Pour obtenir la liste complète des paramètres de configuration, consultez la documentation en ligne pgBackRest Configuration Reference.
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 section à 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 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 un job Cron qui exécute la commande pgbackrest backup
aussi souvent que nécessaire. Pour en savoir plus, consultez Planifier une sauvegarde.
Configuration personnalisée et sauvegardes à distance
Une fois que vous avez une configuration de base qui fonctionne, vous pouvez ajuster votre fichier de configuration en fonction de vos besoins et 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 écrit simultanément dans chacun d'eux comme 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 Configuration de base avec des sauvegardes locales. Ces modifications apportées à ce fichier définissent un deuxième dépôt de sauvegarde dans un bucket Cloud Storage, accessible via Identity and Access Management (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 des sauvegardes dans un bucket Cloud Storage à l'aide d'une autre méthode d'authentification, telle qu'une clé de compte de service Google Cloud 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 permettre au compte de service associé à votre instance de VM d'écrire dans le bucket. Pour cela, le rôle IAM "Utilisateur des objets Storage" doit être défini 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.
Après avoir 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
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
.