Skip to content

Configuration Automatisée de Sauvegarde Plakar

Architecture de Sauvegarde Plakar

Cette page détaille la configuration technique du système de sauvegarde. Puisque les fichiers sources Ansible ne sont pas accessibles à tous les utilisateurs, les extraits de code et leurs explications sont regroupés ici.

1. Vue d'ensemble

L'architecture s'appuie sur : - Plakar : Outil de sauvegarde chiffré et dédupliqué. - SSHFS : Montage dynamique du stockage distant via un bastion. - Ansible : Automatisation du déploiement et de la maintenance.


2. Déploiement de l'Agent (playbook-backup_agent.yaml)

Ce playbook est exécuté sur tous les serveurs à sauvegarder. Il installe Plakar et configure la planification.

Extrait du Playbook : Installation et Configuration

- name: Installer et configurer Plakar pour les sauvegardes
  hosts: serveur
  become: true
  tasks:
    - name: Installer les dépendances (curl, gnupg2, sshfs)
      ansible.builtin.package:
        name: [curl, gnupg2, sshfs]
        state: present

    - name: Ajouter le dépôt officiel Plakar
      ansible.builtin.shell: |
        curl -fsSL https://packages.plakar.io/keys/plakar.gpg | gpg --dearmor -o /usr/share/keyrings/plakar.gpg
        echo "deb [signed-by=/usr/share/keyrings/plakar.gpg] https://packages.plakar.io/deb stable main" > /etc/apt/sources.list.d/plakar.list
        apt-get update

    - name: Installer Plakar
      ansible.builtin.package:
        name: plakar
        state: present

    - name: Déployer le script de sauvegarde
      ansible.builtin.copy:
        src: ansible-script-backup.sh
        dest: /opt/ansible/ansible-script-backup.sh
        mode: '0700'

Planification Systemd

L'agent utilise un duo Service + Timer pour s'exécuter chaque semaine.

Le Timer (/etc/systemd/system/plakar-backup.timer) :

[Unit]
Description=Run Plakar Backup every Wednesday at 3AM

[Timer]
OnCalendar=Wed *-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
Le paramètre Persistent=true garantit que si le serveur était éteint à 3h, la sauvegarde se lance dès le démarrage suivant.


3. Le Script de Sauvegarde (ansible-script-backup.sh)

C'est le moteur de la sauvegarde. Il gère la connexion réseau et l'exécution de Plakar.

#!/bin/bash
# (Extraits choisis pour la clarté)

# 1. Montage SSHFS via Bastion
sshfs "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" "$LOCAL_MOUNT_POINT" \
    -o "IdentityFile=$SSH_KEY_PATH",reconnect,allow_other \
    -o ProxyCommand="ssh -W %h:%p $REMOTE_USER@$BASTION_HOST"

# 2. Vérification de la nécessité (Seuil de 7 jours)
check_backup_needed() {
    last_date=$(plakar at "$REPO" ls -tag "$(hostname)" | awk '$NF == "/" {print $1; exit}')
    # Calcule si le dernier backup a plus de 604800 secondes (7j)
}

# 3. Exécution avec exclusions
plakar at "$REPO" backup -tag "$(hostname)" -concurrency 1 \
    -ignore "/proc" -ignore "/sys" -ignore "/tmp" -ignore "/var/cache" \
    -ignore "*.mp4" -ignore "*.mkv" \
    "/"

4. Maintenance Centralisée (playbook-backup_maintenance.yaml)

Ce playbook tourne sur un serveur maître pour nettoyer les anciennes sauvegardes.

Logique de Nettoyage (Pruning)

Le point critique est l'analyse Python intégrée pour protéger les données :

# Analyse par tag (hostname)
for snap in snapshots:
    age = (now - snap_date).days
    if age > 120:
        old_count += 1

# Fail-safe : On ne supprime que si on garde au moins 3 snapshots
if snapshots_older_than_120d > 0 and remaining_after_prune >= 3:
    execute_prune()

Tâches de maintenance globales

- name: Libérer les verrous
  ansible.builtin.shell: rm -f "{{ local_mount_point }}/locks/"*

- name: Maintenance structurelle Plakar
  ansible.builtin.command: plakar at "{{ local_mount_point }}" maintenance
La commande maintenance de Plakar réorganise les données et supprime physiquement les blocs de données qui ne sont plus référencés par aucun snapshot.


5. Guide d'Exploitation

Lister les sauvegardes d'un hôte précis

plakar at /mnt/remote-backup ls -tag "nom-du-serveur"

Restaurer un dossier

plakar at /mnt/remote-backup pull <snapshot-id>:/var/www/ -to /tmp/restoration/

Abstract

Sécurité : Le script de maintenance arrête temporairement l'interface Web Plakar (plakar-web) pour éviter toute corruption de base de données pendant le nettoyage.