PgBackRest

Schéma 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

bash

    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

bash

    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

bash
apt-get update
apt-get install pgbackrest -y

Configuration

/etc/pgbackrest.conf
[global]
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.
/etc/pgbackrest.conf
[global]
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

bash
sudo -u postgres pgbackrest --stanza=main --log-level-console=info stanza-create
⚠️ 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.
bash
sudo -u postgres pgbackrest --stanza=main --log-level-console=info backup
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

Supposons que nous voulons restaurer les données de la BDD de vmtest1 avec les données de la BDD de vmtest2
bash
sudo -u postgres pgbackrest --stanza=main --log-level-console=info -db1-path=/var/lib/postgresql/10/main restore

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 :

bash
sudo chown -R postgres:postgres /var/log/pgbackrest
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 :

postgresql.conf
archive_mode = on
archive_command = 'pgbackrest --stanza=your-cluster archive-push %p'

Vous pouvez également vérifier et modifier ce paramètre à l'aide de commandes SQL :

SQL
SHOW archive_mode;
ALTER SYSTEM SET archive_mode TO 'on';
SQL
SHOW archive_command;
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.