Sauvegardes

Plan de sauvegarde

Les données sont catégorisées comme suit :

  • génériques, il s’agit de notre configuration partagée sur Gitlab, elle est versionnée et copiée sur nos postes, ainsi que conservée dans l’archive Gitlab ;
  • spécifiques, il s’agit des configurations spécifiques éditées directement sur les serveurs, elles sont sauvegardées en incrémental ;
  • applicatives, il s’agit des données fichiers générées par les applications, elles sont sauvegardées en incrémental ;
  • bases de données, il s’agit des données stockée en MySQL, PGSQL, etc. elles sont sauvegardées en continu et incrémental.

Les sauvegardes incrémentales reposent sur une synchronisation régulière et un élagage de l’historique, les règles sont les suivantes :

  • 1 backup / 6h (soit 4 backups par jour)
  • 5 quotidiens / semaines, au delà backups quotidiens élagués
  • 4 hebdomadaires / mois, au delà backups hebdomadaires élagués
  • 3 mensuels, au delà les backups mensuels sont élagués

Il est donc possible de restorer jusqu’à J-3 mois, avec une granularité journalière dans la semaine, hebdomadaire dans le mois, puis mensuelle.

Les sauvegardes de bases de données reposent sur les journaux d’écriture des bases. L’ensemble des journaux d’écriture est synchronisé avant d’être supprimé des serveurs. Une sauvegarde complète est effectuée mensuellement pour améliorer les performances de restoration.

Réalisation des sauvegardes

Sauvegardes incrémentales

Toutes les sauvegardes incrémentales sont réalisées par restic. L’outil est déployé sur chaque serveur, et l’ensemble des serveurs dépose ses sauvegardes dans un dépôt dédié, sur un serveur hébergé par un des membres.

Les sauvegardes sont toutes chiffrées avant envoi, aucune donnée en clair ne quitte donc les serveurs.

Les clés de déchiffrement des sauvegardes sont conservées par les administrateurs dans une archive chiffrée personnelle.

Sauvegardes de bases de données

Les journaux binaires des bases de données sont stockés dans un dossier wal par projet. Ce dossier est sauvegardé par borg avec une configuration de rétention spécifique.

Pour MySQL, les lignes suivantes sont ajoutées à la configuration des projets :

  volumes:
    - ./wal:/wal
  command: --log-bin=/wal

Pour PostgreSQL, les lignes suivantes sont ajoutées à la configuration des projets :

  volumes:
    - ./wal:/wal
    - ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf

Un script exécuté par crontab parcourt une fois par mois l’ensemble des projets déployés dans /srv/apps et /srv/users. Lorsqu’il rencontre une base de données Mysql ou Postgresql, il déclenche les actions de sauvegarde.

Pour MySQL : mysqldump --all-databases --master-data --single-transaction | gzip > /wal/$BACKUPNAME.sql.gz

Pour PostGres : pg_basebackup -Ft -z -D /wal/$BACKUPNAME -U postgres