[[:admin|< retour à la page de l'administration technique]]
L'ancienne page sur les backups est disponible ici : [[admin:services:backup-archive20190823|admin:services:backup-archive20190823]]
En cours de rédaction et mise en place.
PoC : herve & toadjaune
Backup en cours de mise en place.
Machines concernées : toutes
Priorité donnée à dodecagon
===== Motivation =====
FedeRez est une asso étudiante, dans laquelle, comme pour la plupart des assos de réseau étudiantes (si ce n'est plus), les ressources humaines peuvent fluctuer considérablement au cours du temps, parfois avec pas ou peu de passations de savoir.
Les infrastructures et services que nous mettons en place doivent donc chercher à être aussi robustes que possible.
Mais pas robustes au sens haute disponibilité, failover, etc ; plutôt au sens de disaster recovery.
Ce qu'on veut, ce n'est pas une infra qui ne tombe jamais, c'est une infra qu'on a les capacités de réparer quand elle tombe.
Ça implique plusieurs choses :
* KISS
* Bonne documentation
* Backups solides
Le choix de Borg + ansible me semble un bon compromis à ce niveau : pas de spof, pas de système compliqué de clustering, une seule techno assez simple d'utilisation partout, versatilité importante (se balader dans un backup en fuse, etc...)
Aucune objection à en plus mettre d'autres types de backups tels que des snapshots de vm, c'est incontestablement plus simple d'utilisation dans les cas où c'est applicable, etc. Mais c'est plus limité en scope (proxmox vs hosting chez un tiers) et en résilience (c'est plus la même version de xxxx du coup le snapshot est plus compatible, ah mais on peut pas la restaurer là parce que pas la bonne conf réseau, etc)
===== Fonctionnement de la solution =====
**BorgBackup** (ou Borg) sert à effectuer la sauvegarde proprement dite vers les serveurs de destination. Il gère un historique des versions des sauvegardes ainsi que la déduplication et la compression des données. Son installation et sa configuration sont gérés via ansible.
**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
Backupninja est installé et configuré manuellement là où il est utilisé.
===== Serveurs de sauvegarde =====
Actuellement, 2 serveurs sont destination des sauvegardes réalisées par Borg :
* [[admin:serveurs:memoragon|memoragon]] (LXC non privilégié sur [[admin:serveurs:ronderu|ronderu]])
* [[admin:serveurs:coronagon|coronagon]] (KVM hébergé au Résel)
----
===== Opérations courantes =====
La doc concernant la mise en place initiale se situe plus bas.
==== Faire une sauvegarde ====
Cette opération n'est normalement pas requise, un cron s'en charge.
On peut néanmoins lancer manuellement un backup en exécutant le script `/etc/borg/system.sh` sur le système que l'on veut sauvegarder.
==== Mettre à jour la liste des chemins à sauvegarder ====
La configuration a lieu dans [[https://gitlab.federez.net/federez/ansible|le repo ansible]].
La plupart des hôtes utilisent la configuration commune, définie dans [[https://gitlab.federez.net/federez/ansible/-/blob/master/inventory/group_vars/all/vars.yml|inventory/group_vars/all/vars.yml]], mais il est possible de surcharger cette configuration par hôte ou par machine dans ''inventory/group_vars'' ou dans ''inventory/host_vars''.
Redéployer le playbook après changement.
==== Manipuler les backups (listing, restauration, etc) ====
TODO
Les commandes suivantes peuvent indifféremment être effectuées sur :
* La machine dont on cherche à manipuler les backups
* Un des serveurs de backup
Commencer par configurer les variables d'environnement suivantes :
export BORG_RSH="ssh -i /root/.ssh/id_ed25519-backup"
export BORG_PASSPHRASE="COMMON_SECRET_TO_REPLACE" # Présent dans le repo ansible ou dans /etc/borg/system.sh sur les systèmes backupés
export REPOSITORY="borgbackup@memoragon.federez.net:system" # Remplacer memoragon si vous voulez accéder aux backups stockés sur coronagon
Il est notamment possible de :
* lister les backups
* Faire une archive tar à partir d'un backup
* Monter l'archive localement via fuse et lire son contenu avec n'importe quel outil
Se référer à la documentation de borg pour les syntaxes exactes.
===== Installation initiale 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 |
packages = yes
partitions = yes
dosfdisk = yes
hardware = yes
luksheaders = no
lvm = yes
# packagesfile = /var/backups/dpkg-selections.txt
# selectionsfile = /var/backups/debconfsel.txt
# partitionsfile = /var/backups/partitions.__star__.txt
# hardwarefile = /var/backups/hardware.txt
# luksheadersfile = /var/backups/luksheader.__star__.bin
# If vservers = yes in /etc/backupninja.conf then the following variables can
# be used:
# vsnames = all | ... (default = all)
++++
Activer les backups pour la base de donnée MySQL (:!: uniquement sur **hexagon**)
++++ Ajouter le fichier /etc/backup.d/20.mysql |
### backupninja MySQL config file ###
# hotcopy = < yes | no > (default = no)
# make a backup of the actual database binary files using mysqlhotcopy.
hotcopy = no
# sqldump = < yes | no > (default = no)
# make a backup using mysqldump. this creates text files with sql commands
# sufficient to recontruct the database.
#
sqldump = yes
# sqldumpoptions =
# (default = --lock-tables --complete-insert --add-drop-table --quick --quote-names)
# arguments to pass to mysqldump
# sqldumpoptions = --add-drop-table --quick --quote-names
# compress = < yes | no > (default = yes)
# if yes, compress the sqldump output.
compress = yes
# dbhost = (default = localhost)
# backupdir = (default: /var/backups/mysql)
# where to dump the backups. hotcopy backups will be in a subdirectory
# 'hotcopy' and sqldump backups will be in a subdirectory 'sqldump'
backupdir = /var/backups/mysql
# databases = (default = all)
# which databases to backup. should either be the word 'all' or a
# space separated list of database names.
databases = all
configfile = /etc/mysql/debian.cnf
++++
Tester avec
sudo backupninja -t -n
----
===== Mise en place initiale de BorgBackup (ou Borg) =====
Aucune mise en place initiale n'est requise.
Le rôle ansible déployant la configuration est capable d'installer intégralement un serveur de backup, seul un accès ssh est requis.