Outils pour utilisateurs

Outils du site


admin:services:backup

Ceci est une ancienne révision du document !


< retour à la page de l'administration technique

Le nouveau système de sauvegarde utilisant obnam vient d'être mis en place (Zertrin 2016-02-17 00:00).

La doc est en mode release candidate (99 % finie quoi).

:!: EN PHASE DE TEST :!:

Concept de sauvegarde

Backupninja sert pour les sauvegardes automatisées locales (/var/backups) :

  • des informations systèmes utiles (dpkg-selections, fstab, lvm…)
  • des dumps des bases de données MySQL

Obnam sert à effectuer la sauvegarde proprement dite vers les serveurs de destination. Il gère l'aspect snapshot et déduplication des données.

Opérations courantes

  La doc concernant la mise en place initiale se situe plus bas.

Faire une sauvegarde

Exemple depuis hexagon vers quigon :

obnam --config /etc/obnam/to_quigon.profile backup

Mettre à jour la liste des chemins à sauvegarder

Voir la sous-section Contenu des fichiers de config.

 Pensez bien à mettre à jour le contenu des fichiers de config sur le wiki également !

Voir les générations (versions)

Exemple depuis hexagon avec l'archive située sur quigon :

obnam --config /etc/obnam/to_quigon.profile generations

Restaurer des données

Si dessous quelques exemples testés.

Voir aussi la doc officielle : http://code.liw.fi/obnam/manual/obnam-manual.en.html#restoring-from-backups

Restauration depuis le serveur originel

Ce cas se présente lorsque le serveur originel est toujours “ok” mais qu'on veut restaurer des données perdues/modifiées par inadvertance/…

Restauration via montage FUSE

Exemple depuis hexagon avec l'archive située sur quigon :

Création d'un dossier pour le point de montage

mkdir /path/to/restore-fuse-mountpoint

montage de l'archive en tant que système de fichier FUSE

obnam --config /etc/obnam/to_quigon.profile mount --to /path/to/restore-fuse-mountpoint

Montre les générations accessibles pour la restauration

ls -la /path/to/restore-fuse-mountpoint

Restauration du fichier /etc/postfix/main.cf depuis la dernière génération

cp /path/to/restore-fuse-mountpoint/latest/etc/postfix/main.cf /tmp/main.cf.restored

Démonter le système de fichier FUSE

fusermount -u /path/to/restore-fuse-mountpoint

Restauration depuis une machine tierce

Dans le cas où l'on veut restaurer sur une machine X (pas précédemment inclue dans le système des sauvegardes) les données d'une machine A à partir de la sauvegarde effectuée sur la machine B ou C.

  • Il faut installer obnam sur la machine X (merci Captain Obvious !)
  • Il faut au préalable ajouter la clef publique SSH du compte qui sert à effectuer la restauration dans le ~obnam/.ssh/autorized_keys sur la machine B (sinon obnam ne pourra pas se connecter en SFTP au repository).
  • Il suffit ensuite d'utiliser obnam depuis la machine X en précisant
    • l'option --repository=sftp://obnam@machineB.example.org/~/obnam-repository pour aller chercher les données sur la machine B
    • l'option --client-name=machineA pour restaurer les données de la machine A
    • l'option --no-default-configs pour faire fi de toute éventuelle configuration d'obnam déjà présente sur la machine X

Exemple testé ci-dessous : restauration sur gluon (serveur perso de Zertrin) de données de baldrick à partir de la sauvegarde située sur hexagon.

Avec FUSE
  • Ajout de la clef SSH de zertrin@gluon dans ~obnam/.ssh/authorized_keys sur hexagon : exercice laissé au lecteur
  • Lister les générations disponibles (et en même temps vérifier que la connexion fonctionne) :
obnam --no-default-configs --repository=sftp://obnam@hexagon.federez.net/~/obnam-repository --client-name=baldrick generations

output

  • Préparer un point de montage pour le système de fichier FUSE :
mkdir /path/to/obnam_restore_baldrick
  • Monter la sauvegarde via obnam avec FUSE :
obnam --no-default-configs --repository=sftp://obnam@hexagon.federez.net/~/obnam-repository --client-name=baldrick mount --to /path/to/obnam_restore_baldrick
  • Vérifier qu'on a bien toutes les générations de dispo dans /path/to/obnam_restore_baldrick :
ls -la /path/to/obnam_restore_baldrick

output

  • Voir le contenu de la génération 42 :
ls -la /path/to/obnam_restore_baldrick/42
  • Voir le contenu de la dernière génération (latest) :
ls -laH /path/to/obnam_restore_baldrick/latest

output

  • Restaurer le fichier /etc/postfix/main.cf (par exemple) de la génération 42 :
cp /path/to/obnam_restore_baldrick/42/etc/postfix/main.cf /path/to/destination/main.cf.restored
  • Démonter la sauvegarde :
fusermount -u /path/to/obnam_restore_baldrick

Mise en place initiale d'obnam

Prérequis

  • Serveur de départ : obnam
  • Serveur d'arrivée : accessible en SFTP. Un utilisateur dédié obnam et son home accessible en SFTP par l'utilisateur qui exécute obnam sur le serveur de départ (typiquement root) devra être créé (cf. ci-dessous)

  Exemple avec hexagon, mais la procédure est la même pour chaque serveur.

Installation d'obnam

Utilisation des dépôts jessie-backports pour avoir une version assez récente. Dans /etc/apt/source.list ajouter (si nécessaire) :

deb http://http.debian.net/debian jessie-backports main

Puis apt-get update et avec l'aide d' aptitude par exemple choisir la version d'obnam provenant des backports.

Préparatifs sur un serveur de destination

  Opérations effectuées en root. Vous pouvez aussi le faire avec sudo si vous préférez.

  Exemple ici avec quigon comme serveur de destination, à répéter pour chaque serveur de destination en adaptant les noms de serveurs.

Ajout de l'utilisateur obnam:

  Pour quigon et baldrick on place le $HOME d'obnam dans /data/obnam pour profiter de la grosse partition où se trouve /data

quigon ~ # adduser --system --group --disabled-password --shell /usr/lib/sftp-server --home /data/obnam obnam

  Pour hexagon on place le $HOME d'obnam dans /home/obnam pour profiter de la grosse partition où se trouve /home

quigon ~ # adduser --system --group --disabled-password --shell /usr/lib/sftp-server --home /home/obnam obnam

On prépare le fichier .ssh/authorized_keys pour permettre la connexion par clef publique depuis les autres serveurs.

quigon ~ # cd ~obnam
quigon ~obnam # sudo -u obnam mkdir .ssh
quigon ~obnam # sudo -u obnam touch .ssh/authorized_keys
quigon ~obnam # chmod 600 .ssh/authorized_keys
quigon ~obnam # vim .ssh/authorized_keys # ajouter les clefs publiques de root@hexagon et root@baldrick

On teste si la connexion sans mot de passe fonctionne depuis le serveur de départ (ici exemple avec hexagon) et on en profite pour créer le repository pour la sauvegarde (si pas déjà fait).

hexagon ~ # sftp obnam@quigon.federez.net
sftp> mkdir obnam-repository
sftp> ^D

Configuration d'obnam

Initialisation du répertoire /etc/obnam :

hexagon ~ # mkdir /etc/obnam && cd /etc/obnam
hexagon obnam # touch obnam_hexagon.conf
hexagon obnam # touch to_baldrick.profile
hexagon obnam # touch to_quigon.profile

Contenu des fichiers de config

  • Le premier fichier (obnam_<servername>.conf) correspond à la conf spécifique au serveur qui crée et envoie ses sauvegardes. On y trouve notamment la liste des chemins à inclure et ceux à exclure.
  • Les deux fichiers suivants (to_<servername>.profile) servent juste à pointer vers le dépôt de sauvegarde sur les deux autres serveurs.

Attention pour les options root et exclude : le dernier élément ne doit pas se terminer avec une virgule !

config pour hexagon (2016-02-17 00:00)

config pour quigon (2016-02-17 00:00)

config pour baldrick (2016-02-17 00:00)

Test première sauvegarde

Exemple depuis hexagon vers quigon:

obnam --config /etc/obnam/to_quigon.profile backup

Purger les vieilles générations selon une politique donnée

L'option keep = 72h,15d,52w,5y dans le fichier de config correspond à la politique suivante :

  • garder une génération par heure pendant 72 heures
  • garder une génération par jour pendant 15 jours
  • garder une génération par semaine pendant 52 semaines
  • garder une génération par an pendant 5 ans

En appelant la commande suivante une fois par jour, les générations qui sont superflues sont supprimées de l'archive.

Exemple depuis hexagon avec l'archive située sur quigon :

obnam --config /etc/obnam/to_quigon.profile forget

Mise en place des cron pour obnam

Les crons se trouvent dans /etc/cron.d/obnam-backup et /etc/cron.d/obnam-forget

Les /etc/cron.d/obnam-backup sur les 3 serveurs

Les /etc/cron.d/obnam-forget sur les 3 serveurs

                                       . . . 0 . . .
                                   55                  5
                                 .           +           .
                               .             |             .
                             .               |               .
                           50                |                 10
 H <- B <- Q              .                  |
 +         ^             .                   |                   .
 | backup  | +-----+     .                   |                   .           H -> B -> Q
 +---------+       |                         |                   .           ^         +
toutes les 4h      |    45  +----------------------------------+ 15   +----+ | forget  |
 de 3h à 23h       |     .                   |                   .    |      +---------+
                   |     .                   |                   .    |    seulement à 0h25
                   |     .                   |                   .    |
                   |                         |                        |
                   +----> 40                 |                 20     |
                             .               |               .        |
 H -> B -> Q                   .             |             .          |
 ^         +                     .           +           .            |      H <- B <- Q
 | backup  | +------------------> 35                   25 <-----------+      +         ^
 +---------+                           . . . 30 . . .                    +-+ | forget  |
toutes les 4h                                ^                           |   +---------+
 de 1h à 21h                                 +---------------------------+ seulement à 2h30

Installation de backupninja

Backupninja sert à créer des backups des informations système ainsi que de la base de donnée MySQL automatiquement.

Pour info, les backups créés par backupninja sont stockés dans /var/backups. Ce dossier est inclus dans la sauvegarde d'obnam ce qui permet d'externaliser les backups effectués par backupninja.

apt-get install hwinfo debconf-utils backupninja

Désactiver l'envoi de mails en cas de succès : dans /etc/backupninja.conf mettre/changer reportsuccess = no.

Activer les backups des infos systèmes (:!: mettre lvm = no pour les systèmes sans LVM comme quigon)

Ajouter le fichier /etc/backup.d/10.sys

Activer les backups pour la base de donnée MySQL (:!: uniquement sur hexagon et baldrick)

Ajouter le fichier /etc/backup.d/20.mysql


Le système de sauvegarde documenté ci-dessous utilisant duplicity avec le wrapper duplicity-backup.sh est en train d'être migré vers une nouvelle solution utilisant obnam. (Zertrin 2016-02-14 23:15) :!: NE PLUS UTILISER :!:

Duplicity

Backup interserveurs en mode push a l'aide de duplicity et son wrapper duplicity-backup.

  • Le wrapper pour duplicity se trouve sous /root/scripts/duplicity-backup
  • Les sauvegardes se trouvent sur chaque serveur dans le répertoire /var/duplicity1)
  • La configuration se trouve sous /etc/duplicity-backup.<machine1>_to_<machine2>.conf
  • Le shellscript lancé par cron se trouve sous /etc/cron.daily/duplicity-backup

Pour consulter l'état actuel des sauvegardes de <machine1> vers <machine2> :

sudo /root/scripts/duplicity-backup/duplicity-backup.sh -c /etc/duplicity-backup.machine1_to_machine2.conf -s

Situation actuelle

hexagon → quigon (2015-09-14 21:00)

hexagon → baldrick (2015-09-14 21:00)

quigon → hexagon (2015-09-14 21:00)

quigon → baldrick (2015-09-14 21:00)

baldrick → hexagon (2015-06-07 01:00)

baldrick → quigon (2015-06-07 01:00)

Détails techniques

Mise en place initiale

FIXME PAS ENCORE ADAPTÉ/MIS EN FORME : ne pas utiliser tel quel ! Mais l'idée générale y est et devrait suffire à reproduire.

:!: Procédure à ne faire que si l'on part de zéro sur tous les serveurs (pas de backups en place)

Voir la procédure

Extension sur un nouveau serveur

:!: Si au moins un des serveurs a déjà été configuré (voir procédure précédente) et qu'on désire préparer un autre serveur pour effectuer des sauvegardes via duplicity-backup.

Voir la procédure

Ajout de nouvelles destinations de sauvegarde

:!: Seulement si le serveur auquel on ajoute une nouvelle destination de sauvegarde a déjà été configuré une première fois (voir procédure ci-dessus).

Voir la procédure

Sauvegarde de la config et des clefs de chiffrement

Très important ! Chaque admin technique devrait générer ces sauvegardes pour lui-même et les conserver en lieu sûr (i.e. pas sur les serveurs où elles ont été générées). Sans ces données il sera difficile de restaurer les données. (et même impossible si les clefs GPG sont perdues)

Ces archives sont générées à l'aide de l'option --backup-script du wrapper duplicity-backup.sh.

Ceci génère une archive TAR chiffrée symétriquement avec GPG. Le mot de passe utilisé est le même pour tous les serveurs et se trouve dans /root/passwords/duplicity-backup

Dans l'archive se trouve tout ce qui est nécessaire pour effectuer une restauration des données à partir d'un autre serveur (fichier de config + clefs GPG de signature et de chiffrement).

hexagon ~ # /root/scripts/duplicity-backup/duplicity-backup.sh -c /etc/duplicity-backup.hexagon_to_quigon.conf --backup-script
You are backing up:
      1. /root/scripts/duplicity-backup/duplicity-backup.sh
      2. GPG Secret encryption key: 8B97F497 and GPG secret sign key: 9ED0EF7B
      3. Config file: /etc/duplicity-backup.hexagon_to_quigon.conf
Backup tarball will be encrypted and saved to: /root/duplicity-backup-2013-07-25.tar.gpg

>> Are you sure you want to do that ('yes' to continue)?
yes
Encrypting tarball, choose a password you'll remember...

IMPORTANT!!
>> To restore these files, run the following (remember your password):
gpg -d duplicity-backup-2013-07-25.tar.gpg | tar x

Procédure de restauration

Dans tous les cas il est nécessaire de diposer de la clef de déchiffrement correspondant à la clef GPG 8B97F497

Restaurer depuis le serveur d'origine

On suppose ici le cas où un fichier ou dossier a été modifié ou supprimé par mégarde et qu'on cherche à restaurer celui-ci tel qu'il était auparavant, le tout depuis le serveur d'origine.

C'est la situation la plus simple car duplicity-backup.sh a déjà été mis en place et est configuré.

Voici la commande générique :

serveur1 ~ # /root/scripts/duplicity-backup/duplicity-backup.sh \
  --config /etc/duplicity-backup.<machinededépart>_to_<machinedarrivée>.conf \
  --restore-file [FILE_TO_RESTORE] [DESTINATION] \
  --time [TIME]

avec:

  • --restore-file est équivalent à --restore-dir. ;-) La procédure fonctionne de manière strictement identique pour restaurer un fichier ou un dossier.
  • [FILE_TO_RESTORE] de la forme relative/path/to/the/file/in/the/archive
  • [DESTINATION] de la forme /path/to/where/to/place/the/restored/file
  • [TIME] pour le format, cf la doc officielle. Exemples qui fonctionnent:
    • 1H30M : il y a une heure et trente minutes
    • 12D : il y a 12 jours
    • “2015-12-01T00:00:00” le 1er décembre 2015 à minuit

Exemple de restauration du fichier /etc/postfix/main.cf tel qu'il était il y a 12 jours sur le serveur hexagon depuis le backup effectué sur quigon. Le fichier restauré est enregistré sous
/root/main.cf.restored
.

hexagon ~ #/root/scripts/duplicity-backup/duplicity-backup.sh -c /etc/duplicity-backup.hexagon_to_quigon.conf --restore-file etc/postfix/main.cf /root/main.cf.restored --time 12D

Exemple de restauration du dossier /etc/apache2 tel qu'il était il y a 1 heure et demi sur le serveur baldrick depuis le backup effectué sur hexagon. Le dossier restauré est enregistré sous
/root/etc-apache2.restored
.

baldrick ~ # /root/scripts/duplicity-backup/duplicity-backup.sh -c /etc/duplicity-backup.baldrick_to_hexagon.conf --restore-dir etc/apache2 /root/etc-apache2.restored --time 1H30M

Restaurer depuis une autre machine que le serveur d'origine

On suppose ici que l'on a plus accès au serveur d'origine (exemple perte du disque-dur) et qu'on veuille restaurer les données sauvegardées sur une autre machine.

On suppose aussi que l'on dispose des éléments suivants :

  • Fichier tar contenant le backup du script et la configuration. Ce fichier est sensé avoir été créé à l'aide de l'option --backup-script du wrapper duplicity-backup.sh et la procédure est documentée ci-dessus.
  • Passphrase de la clef de chiffrement (à FedeRez c'est la clef GPG 8B97F497)

:!: Il est très important de s'assurer que ces éléments aient été bien conservés en dehors des serveurs (par exemple dans une base KeePass de plusieurs admin tech de FedeRez).

FIXME finir la doc. En attendant voici l'idée générale :

  • Installer duplicity et mettre en place le wrapper duplicity-backup.sh comme documenté ci-dessus.
  • Utiliser le fichier de config et les clefs GPG issues de la sauvegarde du script pour restaurer les données de la même manière que documenté dans la section précédente.
1)
/var/duplicity peut être éventuellement un lien symbolique vers un autre chemin situé sur une partition plus adaptée quand celle où se trouve /var ne convient pas au volume des données à sauvegarder
admin/services/backup.1456485155.txt.gz · Dernière modification : 2016/02/26 12:12 de zertrin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki