DEV Community

ZINSOU Trinité
ZINSOU Trinité

Posted on • Edited on

Configurer des sauvegardes incrémentales avec PostgreSql - Mise en place (Partie 2)

🧭 Introduction

Dans la premiĂšre partie, on a posĂ© les bases : comprendre les diffĂ©rents types de sauvegardes, le rĂŽle crucial des fichiers WAL et ce que propose Barman. Maintenant, il est temps de passer Ă  l’action.

Dans ce guide pratique, on va configurer PostgreSQL et Barman pas Ă  pas pour mettre en place un systĂšme de sauvegarde incrĂ©mentale robuste et automatisĂ©. L’objectif est simple : que tu puisses le reproduire dans ton propre environnement.

â„č L'environnement de rĂ©fĂ©rence utilisĂ© dans cet article est Ubuntu

Dans la suite nous utiliserons deux serveurs Ubuntu 22, qu’on appellera pg et barman pour postgres et barman respectivements et d’ip respectifs 192.168.58.11 et 192.168.58.12

PrĂȘt ? On entre dans le vif du sujet. 👇

đŸ€” Quelle stratĂ©gie de sauvegarde choisir avec Barman ?

Le choix de la stratĂ©gie de sauvegarde est un Ă©lĂ©ment crucial dans la mise en place d’un systĂšme fiable. Barman prend en charge deux grandes mĂ©thodes :

  • Via rsync : une mĂ©thode classique utilisant SSH pour transfĂ©rer les fichiers du serveur PostgreSQL vers le serveur Barman.

  • Via pg_basebackup : une mĂ©thode moderne qui s’appuie sur le protocole de rĂ©plication en streaming natif de PostgreSQL.

Le streaming via pg_basebackup ne permet les sauvegardes incrĂ©mentales qu’à partir de la version 17 de Postgres, nous allons donc dans la suite voir comment faire nos configurations pour effectuer nos sauvegardes via rsync.

La figure ci dessous illustre comment mettre en place les sauvegardes incrémentales avec rsync.

illustration sauvegarde incrémentale

Il nous faut donc pour réussir notre configuration:

  • Une connexion standard Ă  PostgreSQL (1)

    Utilisée par Barman pour les opérations de gestion, de coordination et de supervision. Cette connexion se fait généralement via un accÚs réseau classique au port PostgreSQL, souvent en TCP/IP.

  • Connexion SSH pour les sauvegardes de base (2)

    Puisque nous avons dĂ©cidĂ© d’utiliser rsync, Barman doit pouvoir utiliser SSH pour se connecter au serveur PostgreSQL. L’utilisateur barman (sur le serveur Barman) doit se connecter en tant que postgres (sur le serveur PostgreSQL) et accĂ©der aux fichiers nĂ©cessaires Ă  la sauvegarde.

  • Connexion SSH pour l’archivage des fichiers WAL (3)

    Pour l’archivage des WALs, une configuration appelĂ©e archive_command de postgresql est activĂ©(on en parle dans la suite 😉), et lĂ  le serveur PostgreSQL doit initier une connexion SSH. L’utilisateur postgres (du serveur PostgreSQL) va se connecter en SSH au serveur Barman, en tant qu’utilisateur barman, afin d’envoyer les fichiers WAL au bon endroit.

🔑 Configurations SSH entre Barman et PostgreSQL

Pour permettre Ă  Barman et PostgreSQL de communiquer de maniĂšre sĂ©curisĂ©e et automatisĂ©e, il est essentiel de configurer une authentification par clĂ© SSH entre les deux serveurs. Cette Ă©tape garantit des transferts fiables, sans mot de passe, pour les sauvegardes et l’archivage des fichiers WAL.

On va donc gĂ©nĂ©rer des paires de clĂ©s ssh en tant qu’utilisateurs postgres et barman Ă  Ă©changer entre nos diffĂ©rents serveurs.

  • Sur le serveur postgres:
su postgres
ssh-keygen -t rsa -b 2048
# fichier généré par default => /var/lib/postgresql/.ssh/id_rsa
ssh-copy-id -i /var/lib/postgresql/.ssh/id_rsa barman@192.168.58.12
Enter fullscreen mode Exit fullscreen mode
  • Sur le serveur barman:
su barman
ssh-keygen -t rsa -b 2048
# fichier généré par default => /var/lib/barman/.ssh/id_rsa
ssh-copy-id -i /var/lib/barman/.ssh/id_rsa postgres@192.168.58.11
Enter fullscreen mode Exit fullscreen mode

Cette étape nécessite de définir en amont pour les utilsateurs postgres et barman des mots de passe robustes.

🔧 Configuration dĂ©taillĂ©e de PostgreSQL pour les sauvegardes incrĂ©mentales (avec rsync)

Avant que Barman ne puisse faire son travail, il faut préparer PostgreSQL pour lui fournir ce dont il a besoin : les fichiers WAL (Write-Ahead Logs). Ces fichiers contenus dans le dossier /var/lib/postgresql/<version>/main/pg_wal/ contiennent un historique clair de toutes les écritures sur la base de données et sont essentiels pour effectuer des sauvegardes incrémentales.

Nous allons donc commencer par activer l’archivage WAL au niveau de notre serveur PostgreSQL.

đŸ—‚ïž Activer l’archivage WAL dans postgresql.conf

Ouvre ton fichier postgresql.conf, généralement situé dans le répertoire principal de PostgreSQL (/etc/postgresql/<version>/main), et recherche la ligne

include_dir = 'conf.d' # include files ending in '.conf' from.

Grace à cette ligne, on peut créer dans le dossier conf.d du répertoire principal, un fichier archivage.conf pour porter nos configurations. Une fois le fichier crée ajoute ce contenu :

listen_addresses = '*'
wal_level = replica
archive_mode = on
archive_command = 'rsync -a %p barman@192.168.58.12:/var/lib/barman/pg/incoming/%f'
max_wal_senders = 3
Enter fullscreen mode Exit fullscreen mode

Explications :

  • wal_level = replica : definit le niveau de journalisation minimal pour permettre les sauvegardes incrĂ©mentales.

  • archive_mode = on : active l’archivage des WAL.

  • archive_command : commande Ă  exĂ©cuter Ă  chaque rotation de logs expliquĂ© dans la premiĂšre partie de la sĂ©rie; ici on indique Ă  PostgreSQL comment transfĂ©rer chaque fichier WAL vers le serveur Barman en utilisant rsync.

  • max_wal_senders : nombre maximum de connexions pour envoyer des WAL Ă  des clients (comme Barman).

✅ Astuce : VĂ©rifie que la commande rsync fonctionne en testant manuellement la copie d’un fichier entre les serveurs.

🔐 Autoriser les connexions Barman dans pg_hba.conf

Dans le fichier /etc/postgresql/<version>/main/pg_hba.conf, ajoute cette ligne pour autoriser l’utilisateur Barman à se connecter :

# Connexion pour les sauvegardes
host    replication     barman     192.168.58.12/32      md5
Enter fullscreen mode Exit fullscreen mode

Ensuite assure-toi que l’utilisateur barman existe dans PostgreSQL, avec un mot de passe sĂ©curisĂ© :

createuser --superuser --replication -P barman
Enter fullscreen mode Exit fullscreen mode

🚀 RedĂ©marrer PostgreSQL

Une fois ces modifications faites, redĂ©marre PostgreSQL pour qu’elles prennent effet :

sudo systemctl restart postgresql
Enter fullscreen mode Exit fullscreen mode

đŸ› ïž Configuration de Barman pour les sauvegardes incrĂ©mentales

Une fois PostgreSQL prĂȘt Ă  envoyer ses WAL, il est temps de prĂ©parer Barman pour recevoir, stocker et gĂ©rer les sauvegardes; notamment les incrĂ©mentales.

📁 Configuration du rĂ©pertoire de sauvegarde

Par défaut, Barman stocke ses données dans le répertoire /var/lib/barman. Il faut créer un sous-répertoire pour chaque serveur PostgreSQL à sauvegarder.

Puisqu’on a deja installĂ© barman sur le serveur exĂ©cute donc :

sudo mkdir -p /var/lib/barman/pg
sudo chown -R barman:barman /var/lib/barman/pg
Enter fullscreen mode Exit fullscreen mode

Tu peux aussi personnaliser l’emplacement via le fichier de configuration.

đŸ§Ÿ Fichier de configuration barman.conf

Le fichier global est/etc/barman.conf et chaque serveur pourra avoir sa propre configuration dans /etc/barman.d/.

Voici un exemple de configuration minimale pour notre serveur nommé pg :

# fichier pg.conf
[pg]
description = "Serveur PostgreSQL principal"
conninfo = host=192.168.58.11 user=barman dbname=test_db
ssh_command = ssh postgres@192.168.58.11
backup_method = rsync
streaming_archiver = on
slot_name = barman
Enter fullscreen mode Exit fullscreen mode

📌 Explications des options importantes :

  • conninfo : comment se connecter Ă  PostgreSQL.

  • ssh_command : connexion SSH utilisĂ©e par rsync.

  • backup_method : rsync.

  • streaming_archiver = on : permet de rĂ©cupĂ©rer les WAL en continu.

  • slot_name : nom du slot de rĂ©plication utilisĂ© par Barman pour les WAL.

⚙ ParamĂštres avancĂ©s utiles

Tu peux adapter la configuration Ă  ton usage :

reuse_backup = link
retention_policy = RECOVERY WINDOW OF 7 DAYS
compression = gzip
Enter fullscreen mode Exit fullscreen mode
  • reuse_backup = link : Ă©vite les duplications de fichiers lors des backups incrĂ©mentaux.

  • retention_policy : conserve les sauvegardes nĂ©cessaires pour restaurer jusqu’à 7 jours en arriĂšre.

  • compression : compresse les sauvegardes pour gagner de l’espace disque.

Toutes les options de configuration sont détaillées sur la documentation officielle de Barmn

Afin que barman puisse se connecter via l'utilisateur spĂ©cifiĂ© Ă  la base de donnĂ©es, nous devons ajouter le mot de passe que nous avons spĂ©cifiĂ© Ă  la crĂ©ation de l’utilisateur barman au fichier .pgpass.

su barman
cat <<'EOF' >>~/.pgpass
mon_serveur:5432:test_db:barman:password
EOF
chmod 0600 ~/.pgpass
Enter fullscreen mode Exit fullscreen mode

Chaque ligne de ce fichier doit etre au format

[db_hote]:[db_port]:[db_nom]:[db_user]:[db_password]

✅ VĂ©rifier que tout fonctionne

Avant de lancer un backup, vĂ©rifie la connexion entre Barman et PostgreSQL; Ă  cette Ă©tape tous les voyants doivent etre au vert đŸ•ș💃 et tu dois avoir:

$ barman check pg
Server pg:
    PostgreSQL: OK
    is_superuser: OK
    wal_level: OK
    directories: OK
    retention policy settings: OK
    backup maximum age: OK (no last_backup_maximum_age provided)
    compression settings: OK
    failed backups: OK (there are 0 failed backups)
    minimum redundancy requirements: OK (have 0 backups, expected at least 0)
    ssh: OK (PostgreSQL server)
    systemid coherence: OK
    archive_mode: OK
    archive_command: OK
    continuous archiving: OK
    archiver errors: OK
Enter fullscreen mode Exit fullscreen mode

Tu peux aussi à présent lancer ton premier test de sauvegarde, si tout se passe bien tu dois avoir:

$ barman backup pg
Starting the backup using the rsync-concurrent method for the pg server in /var/lib/barman/pg/base/20250413T113210
Backup start at LSN: 0/12000060 (000000010000000000000012, 00000060)
This is the first backup for the pg server
The WAL segments preceding the current backup were found:
        000000010000000000000000F from pg server has been removed
        0000000100000000000000010 from server pg has been removed
Starting backup via rsync/SSH for 20250413T113210
Completed copy (duration: 3 seconds)
This is the first backup for the server pg
Asking the PostgreSQL server to finalize the backup.
Backup size: 38.8 MiB. Actual disk size: 38.8 MiB (-0.00% deduplication ratio).
Backup end at LSN: 0/12000138 (00000001000000000000012, 00000138)
Backup completed (start time: 2025-04-13 11:32:10.136973, time elapsed: 5 seconds)
Processing xlog segments from file archiving for pg
        000000010000000000000011
        000000010000000000000012
        000000010000000000000012.00000060.backup
Enter fullscreen mode Exit fullscreen mode

🔁 Automatiser les sauvegardes incrĂ©mentales avec Barman

Une fois Barman et PostgreSQL correctement configurĂ©s, il est essentiel d’automatiser les sauvegardes pour garantir la protection continue de vos donnĂ©es. Heureusement, Barman s’intĂšgre facilement avec les outils classiques de planification de tĂąches, comme cron.

🕒 Planifier les sauvegardes avec cron

Pour dĂ©clencher automatiquement une sauvegarde, il suffit d’ajouter une tĂąche cron sur le serveur Barman. Par exemple, pour lancer une sauvegarde complĂšte tous les jours Ă  2h du matin :

  1. Se connecter en tant que barman :
sudo -u barman crontab -e
Enter fullscreen mode Exit fullscreen mode
  1. Ajouter la tĂąche cron dans cette crontab :
0 2 * * * barman backup pg
Enter fullscreen mode Exit fullscreen mode

💡 Pensez Ă  tester votre commande manuellement avant de l’automatiser, pour vĂ©rifier que tout fonctionne comme prĂ©vu.

📉 Astuces pour optimiser l’espace disque

Voici quelques conseils pour conserver vos sauvegardes tout en maütrisant l’utilisation du stockage :

  • đŸ—ƒïž Compression des sauvegardes : Barman propose la compression automatique des fichiers; possible avec compression = gzip utilisĂ©e plus haut dans nos configurations:

  • đŸ§č Suppression automatique des anciennes sauvegardes : utilisez la politique de rĂ©tention pour ne conserver que les sauvegardes nĂ©cessaires; possible avec retention_policy = RECOVERY WINDOW OF 7 DAYS aussi utilisĂ© dans notre fichier pg.conf .

🔍 Surveillance et gestion des sauvegardes avec Barman

Une fois les sauvegardes en place, il est crucial de les surveiller et de gérer leur cycle de vie pour garantir leur efficacité. Barman fournit plusieurs outils pour cela, directement utilisables en ligne de commande.

✅ VĂ©rifier l’état des sauvegardes

Barman dispose de plusieurs commandes utiles pour suivre l'état de vos sauvegardes et de vos serveurs.

🔧 Lister les sauvegardes disponibles

$ barman list-backup pg
pg 20250415T201754 - Tue Apr 15 20:17:58 2025 - Size: 54.9 MiB - WAL Size: 16.0 MiB
pg 20250415T201516 - Tue Apr 15 20:15:19 2025 - Size: 54.9 MiB - WAL Size: 48.0 MiB
pg 20250413T113210 - Sun Apr 13 11:32:14 2025 - Size: 54.8 MiB - WAL Size: 32.0 MiB
Enter fullscreen mode Exit fullscreen mode

Cette commande affiche entre autre :

  • l’ID de chaque sauvegarde,

  • la date

  • le point de rĂ©cupĂ©ration possible (PITR)

📊 VĂ©rifier l’état gĂ©nĂ©ral du serveur

$ barman check nom_du_serveur
Enter fullscreen mode Exit fullscreen mode

Cette commande fait un diagnostic complet de la configuration : connexions SSH, configuration PostgreSQL, accÚs aux répertoires de sauvegarde, etc.

Obtenir des détails sur une sauvegarde spécifique

barman show-backup nom_du_serveur ID_sauvegarde
Enter fullscreen mode Exit fullscreen mode

Utile pour voir entre autre:

  • les chemins utilisĂ©s,

  • la taille de la sauvegarde,

  • les fichiers WAL associĂ©s,

  • les options activĂ©es.

🧯 Et en cas de problùme ?

En cas d’échec de sauvegarde :

  • Lance barman check pour diagnostiquer.

  • Consulte les logs postgres et barman dans respectivement /var/log/postgresql et /var/log/barman/.

🏁 Conclusion : Garder le contrîle sur vos sauvegardes PostgreSQL

Dans cette seconde partie, nous avons plongĂ© dans les aspects techniques essentiels pour Ă©lĂ©borer une stratĂ©gie de sauvegarde incrĂ©mentale fiable avec Barman. De la configuration fine de PostgreSQL, Ă  la mise en place des connexions sĂ©curisĂ©es en passant par l’automatisation via cron et la surveillance proactive, chaque Ă©tape renforce la robustesse et la rĂ©silience de votre base de donnĂ©es.

GrĂące Ă  Barman, vous disposez d’un outil puissant, souple et open source, capable de rĂ©pondre aux besoins des environnements de production les plus exigeants. Mais la maĂźtrise des sauvegardes ne s’arrĂȘte pas lĂ .

Dans la prochaine partie, nous verrons comment restaurer efficacement une base de données PostgreSQL, notamment via le Point In Time Recovery (PITR), ainsi que des cas pratiques pour tester vos sauvegardes.

👉 Restez connectĂ©s pour aller jusqu’au bout de votre stratĂ©gie de sauvegarde PostgreSQL !

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.