Mise en place des back-up internes des machines

cloud-backup

Un article expliquant un peu comment je gère mes backups (ça peut en inspirer certains).

Principe

J’utilise un principe assez simple (j’ai 2 machines physiques, dont une avec plusieurs disques durs qui ne sont pas au même endroit + un serveur FTP fourni par online) :

  • La machine chez online perso fait un backup des fichiers, système et la base de données, sur elle même dans un dossier (tous les jours et conserve 15 jours d’historique)
  • La machine chez online Jeedom fait un backup des fichiers, système et la base de données sur elle même dans un dossier (tous les jours et conserve 15 jours d’historique)
  • La machine chez moi fait un backup sur un disque dur externe pour les données système + base de données + web (tous les jours et conserve 15 jours d’historique)
  • La machine chez moi fait aussi de la réplication de disque complet pour les données type NAS (toutes les semaines)
  • La machine chez moi récupère les backup de celles de chez online et le met sur un disque externe (tous les jours et conserve 15 jours d’historique)
  • La machine chez online récupère le backup de chez moi (tous les jours et conserve 5 jours d’historique)
  • Tous les 1er du mois la machine de chez online fait une sauvegarde des VMs (durée 2h30)
  • Tous les 2 du mois la machine chez moi récupère la sauvegarde des VMs (durée 7h30 , il y a quand même 600 Go à transférer)

Voilà pour le principe j’espère avoir été clair, comme vous avez pu le remarquer je n’ai pas cherché à optimiser la place utilisée mais plutôt la réplication et la possibilité de remonter un peu dans le temps.

 

Le script

Pour la méthodologie c’est toujours la même  : j’utilise des scripts que j’ai fait moi même qui prennent en premier argument un fichier de configuration qui lui indique quoi faire. Voici les fonctionnalités :

  • Sauvegarde de fichier (utilise rsync)
  • Sauvegarde de base de données MyQSL (il backup toutes les bases sauf : information_schema, mysql, Database et performance_schema)
  • Sauvegarde de base LDAP
  • Envoi sur FTP possible
  • Envoi de mail en cas d’erreur
  • Peut remettre des droits corrects une fois le backup de fichier fini
  • Génère un rapport  de ses actions
  • Évite de faire de la synchro si le dossier source ou cible est vide (ça évite des problèmes lors de la copie de dossier monté ou vers un dossier monté, au cas ou il y ait un souci et que le dossier monté ne soit plus là)

Petite précision le script fait des backup de plusieurs dossiers vers un seul et même dossier (pareil pour les sauvegardes MySQL et LDAP). Si vous voulez synchroniser plusieurs dossiers vers plusieurs dossiers cible il vous faudra utiliser plusieurs fichiers de configuration.

 

Utilisation

Déjà les sources du script sont disponibles ici.

L’utilisation est assez simple :

git clone http://git.jeedom.fr/loic/backup.git

chmod +x backup/*.sh

backup/backup.sh backup.conf

Pour le fichier de configuration il y a un exemple dans backup/sample.conf.

#!/bin/bash
##############Configuration#############
report_log=/var/log/backup.log
cib_dir=/mnt/hdd/Backup_Externe/Darkhome/last
mail=root@*********
#Repertoire source
src_dir[1]=« /srv/share/Admin »
src_dir[2]=« /etc/samba/smb.conf »
src_dir[3]=« /etc/passwd »
src_dir[4]=« /etc/fstab »
src_dir[5]=« /etc/init.d »
src_dir[6]=« /etc/crontab »
src_dir[7]=« /etc/nginx »
src_dir[8]=« /etc/ldap »
src_dir[9]=« /var/www »
#Droit sur le repertoire de backup
chown=1
chown_user=rescue
chown_user=rescue
#LDAP
ldap=1
ldap_basedn=« dc=*****,dc=fr »
ldap_keep_day=2
#MySQL
mysql=1
mysql_user=‘user_dump’
mysql_password=‘xxxxxxxxxxxxxxxxxxxxx’
mysql_host=‘127.0.0.1’
mysql_keep_day=2
#Archivage
archive=1
archive_cib_dir=/mnt/hdd/Backup_Externe/Darkhome/old
archive_keep_day=14
#FTP
ftp=1
ftp_server=« ************** »
ftp_user=« ******* »
ftp_password=« ******** »
ftp_tmp=« /tmp »
ftp_keep_day=3
Pour les explications :
  • Les 3 premières lignes permettent de configurer l’emplacement du fichier de rapport (j’ai un autre script qui m’envoie une fois par semaine ce fichier et le vide), le répertoire cible du backup, et le mail de la personne à prévenir en cas de problème lors du backup
  • Les lignes suivantes indiquent les répertoires ou fichiers à sauvegarder
  • Les 3 paramètres suivants permettent de dire que oui on veut changer les droits après la sauvegarde (770), et de préciser l’utilisateur et le groupe propriétaire
  • Les 3 paramètres suivants permettent de dire que l’on veut sauvegarder le LDAP, de lui donner la base DN et le nombre de jours d’historique à garder
  • Les 5 suivants permettent de configurer la partie MySQL, le premier dit qu’il faut sauvegarder la base de données, le second l’utilisateur, puis le mot de passe, l’ip et enfin le nombre de jours à conserver
  • Les 3 derniers indiquent qu’il faut faire des archives des backups, là où il faut les mettre et le nombre de jours à conserver
  • Et les 5 derniers donne les paramètres FTP dans l’ordre : si on active le transfert FTP en fin de backup, le serveur cible, l’utilisateur, le mot de passe, le dossier temporaire où mettre l’archive pendant sa création et enfin le nombre de jours de backup à garder sur le serveur FTP

Petite précision si vous voulez sauvegarder un serveur distant il vous suffit de mettre dans la partie de dossier à sauvegarder : src_dir[1]= »#USER#@#IP#:#PATH# » (en remplaçant #USER#, #IP# et #PATH# par ce que vous voulez sauvegarder), n’oubliez pas d’autoriser l’utilisateur à se connecter sur le serveur distant (par échange de clef SSH grâce « ssh-copy_id #USER#@#IP# »).

Voilà j’espère que mes explications sont clair es(sinon hésitez pas à poser vos questions en commentaire). Dernière petite précision pour rendre tous ces backup automatiques je les ai mis en crontab (vu qu’ils envoient des mails en cas de problèmes + un rapport hebdomadaire je suis plutôt tranquille si il y a un soucis de backup)

 

Vous aimerez aussi...