PgBackRest
pgBackRest est une solution de sauvegarde et de restauration robuste et performante pour PostgreSQL. Elle prend en charge des fonctionnalités avancées telles que la connexion à un dépôt distant via SSH ou SSL/TLS. Dans cet article, nous explorerons ces deux approches.
TP : REFRESH PGBACKREST
PgBackRest est un outil de sauvegarde et de restauration pour PostgreSQL. Il est conçu pour offrir une gestion robuste, fiable et performante des sauvegardes de bases de données PostgreSQL, en particulier pour les environnements de production.
Objectif : Nous allons provisionner deux machines virtuelles, sur lesquelles nous allons installer PostgreSQL et PgBackRest. Effectuer des modifications sur l’instance 2 et restaurer l’instance 1 avec les données de l’instance 2.
Prérequis :
Machine Virtuelle ou Physique (exemple : Ubuntu 22.04)
Vagrant et VirtualBox puis provisionner deux VM en mode bridge
PostgreSQL et PgBackRest.
Droits root sur la VM.
Provisionnement de la première machine
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.hostname = "vmtest1"
config.vm.network "public_network", ip: "192.168.1.17", bridge: "en0: Wi-Fi (AirPort)"
config.vm.provider "virtualbox" do |v|
v.name = "vmtest1"
end
end
Provisionnement de la deuxièmee machine
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.hostname = "vmtest2"
config.vm.network "public_network", ip: "192.168.1.18", bridge: "en0: Wi-Fi (AirPort)"
config.vm.provider "virtualbox" do |v|
v.name = "vmtest2"
end
end
Attention je suis sur Mac OS X mon vagrantfile est adapté à cet effet.
Installation de PgBackRest
apt-get install pgbackrest -y
Configuration
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
log-level-console=info
log-level-file=error
[main]
pg1-path=/var/lib/postgresql/14/main
✅ [global] – Paramètres communs à toutes les instances PostgreSQL gérées repo1-path=/var/lib/pgbackrest
• Définit le chemin local où seront stockées les sauvegardes.
• Remarque : ce chemin doit être lisible/écrivable par l’utilisateur qui exécute pgbackrest (souvent postgres).
repo1-retention-full=2
• Indique que seules 2 sauvegardes FULL seront conservées.
• Lorsque tu exécutes une 3e sauvegarde full, la plus ancienne est supprimée automatiquement (ainsi que les incrémentales qui y sont rattachées).
• Aide à maîtriser l’espace disque.
log-level-console=info
• Affiche des logs de niveau info et supérieur dans la console.
• Tu verras des messages informatifs sur le processus de sauvegarde.
log-level-file=error
• Seuls les logs de niveau error et au-dessus sont enregistrés dans les fichiers de log.
• Réduction du volume de logs écrits sur le disque.
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
backup-host=192.168.0.20
backup-user=postgres
log-level-console=info
log-level-file=error
[main]
pg1-path=/var/lib/postgresql/14/main
Création d'une stanza
⚠️ Commande à executer sur les deux .
Lancement d'une sauvegarde
⚠️ Un peuplement de la base est primordiale pour les vérifications post opérations, je ferais bientot un article sur comment peupler sa BDD.
La sauvegarde sera disponible dans le repo spécifié dans le pgbackrest.conf dans ce cas "/var/lib/pgbackrest".
Lancement de la restauration depuis le serveur cible
Permissions et configuration de l’archivage
Si vous installez pgBackRest en tant que root, assurez-vous que le répertoire des logs est accessible à l'utilisateur postgres :
sudo chmod 750 /var/log/pgbackrest
Ces permissions permettent à pgBackRest de créer et gérer ses fichiers de log sans erreur.
Activer l'archivage WAL dans PostgreSQL
Pour que pgBackRest fonctionne correctement avec les sauvegardes, vous devez activer le mode d'archivage dans postgresql.conf :
archive_command = 'pgbackrest --stanza=your-cluster archive-push %p'
Vous pouvez également vérifier et modifier ce paramètre à l'aide de commandes SQL :
ALTER SYSTEM SET archive_mode TO 'on';
ALTER SYSTEM SET archive_command TO 'pgbackrest --stanza=main archive-push %p';
⚠️ Un redémarrage de PostgreSQL est nécessaire pour que les changements de configuration prennent effet.