Lorsque l'on a plusieurs serveurs linux à gérer, il faut aussi sauvegarder leur configuration. L'idéal étant d'automatiser un maximum de choses possibles, voici ce qui va être mis en place :
Mise en place du script sur chaque serveur à sauvegarder
L'avantage ici, est qu'un script qui sera lancé par tous les serveurs linux est stocké sur un partage nfs, il suffira si l'on veut modifier le script de sauvegarde pour l'ensemble des serveurs, de le modifier à un seul endroit.
Evidemment, sur certains serveurs, il faudra compléter le script de sauvegarde général, par un script spécifique au serveur concerné. Rien de plus simple dans notre cas : le script commun vérifie la présence sur le serveur en cours de sauvegarde, d'un script " /root/bin/mmv_sauvegardes.sh", et le lance s'il existe. C'est donc dans ce script qu'il faudra paramétrer les sauvegardes particulières à chaque serveur, s'il y en a.
Et voici un exemple de script spécifique à un serveur contenant des bases mysql :
#/bin/sh
# mmv_sauvegardes.sh
# script fermant les connexions a la base et lancant le backup de la base et le dbmaintenance
nom=`basename $0`
# Send all output to a logfile and supress input
typeset LOG=/var/log/mmv_sauvegardes.log
[[ -t 1 ]] && echo "Writing to logfile '$LOG'."
exec >> $LOG 2>&1
exec < /dev/null 2<&1
# -----------------------------------------------
# backup des bases
# -----------------------------------------------
echo `date +"%Y%m%d %H%M%S"`:$nom:" DEBUT DU SRIPT DE SAUVEGARDE"
# sauvegarde de glpi
echo `date +"%Y%m%d %H%M%S"`:$nom:" lancement des dumps de glpidb"
mysqldump --add-drop-table --lock-tables -u XXX -pXXX --databases glpidb > /usr/local/lib/backups/mmv_backup_glpi_`date +"%Y%m%d"`.sql
# suppression des anciens fichiers de backup
echo `date +"%Y%m%d %H%M%S"`:$nom:" nettoyage anciens dumps"
find /usr/local/lib/backups/ -type f -mtime +7 | xargs rm -f
# copie de certains fichiers sur le serveur de sauvegarde
echo `date +"%Y%m%d %H%M%S"`:$nom:" copie glpi sur panoramix"
rsync -v -rlt -z --delete /var/www/html/glpi/ panoramix::Backups/tintin/glpi
echo `date +"%Y%m%d %H%M%S"`:$nom:" copie des dumps sur panoramix"
rsync -v -rlt -z --delete /usr/local/lib/backups/ panoramix::Backups/tintin/bases
echo `date +"%Y%m%d %H%M%S"`:$nom:" FIN DU SCRIPT"
- Chaque serveur ira tous les jours, télécharger une version d'un script de sauvegarde centralisé, qui contient toutes les commandes permettant de sauvegarder la configuration d'un serveur.
Ce script étant centralisé, il ne peut contenir que les commandes communes à tous les serveurs, cela permet de n'avoir qu'un script à maintenir.
Il doit aussi permettre de sauvegarder des éléments spécifiques à chaque serveur. - Pour cela, chaque serveur aura un autre script de sauvegarde local, qui ne contiendra que les commandes de sauvegarde spécifiques. Ces commandes seront appelées par le script général.
Mise en place du script sur chaque serveur à sauvegarder
- créer un fichier /root/bin/mmv_sauveSystem.sh
- ce fichier contiendra le code suivant :
# recupère la dernière version du script centralisé
rsync -v -rlt -z panoramix::Backups/script /root/bin/
# rend le script centralisé exécutable
chmod +x /root/bin/script/saveSystem.sh
# l'exécute
/root/bin/script/saveSystem.sh
- il suffit ensuite de paramétrer le lancement quotidien de ce script
crontab -e
ajouter la ligne 10 5 * * * /root/bin/mmv_sauveSystem.sh
L'avantage ici, est qu'un script qui sera lancé par tous les serveurs linux est stocké sur un partage nfs, il suffira si l'on veut modifier le script de sauvegarde pour l'ensemble des serveurs, de le modifier à un seul endroit.
Evidemment, sur certains serveurs, il faudra compléter le script de sauvegarde général, par un script spécifique au serveur concerné. Rien de plus simple dans notre cas : le script commun vérifie la présence sur le serveur en cours de sauvegarde, d'un script " /root/bin/mmv_sauvegardes.sh", et le lance s'il existe. C'est donc dans ce script qu'il faudra paramétrer les sauvegardes particulières à chaque serveur, s'il y en a.
Contenu du script de sauvegarde
#!/bin/bash
# Fichier stocké sur le serveur de sauvegarde (\\panoramix\Backup-Siege\script)
# ce fichier est téléchargé toutes les nuits par TOUS les serveurs linux, et est
# ensuite exécuté.
# Cela permet de centraliser dans un seul fichier toutes les opérations de sauvegardes
# communes aux serveurs linux
#
# Il est appelé de la manière suivante depuis les serveurs linux :
# [root@front1 bin 10:19]# cat /root/bin/mmv_sauveSystem.sh
# rsync -v -rlt -z 10.1.1.23::Backups/script /root/bin/
# chmod +x /root/bin/script/saveSystem.sh
# /root/bin/script/saveSystem.sh
# et crontab -l
# 10 5 * * * /root/bin/mmv_sauveSystem.sh
#
nom=`hostname -s`:`basename $0`
# Send all output to a logfile and supress input
typeset LOG=/var/log/resalys/${nom}.log
[[ -t 1 ]] && echo "Writing to logfile '$LOG'."
exec >> $LOG 2>&1
exec < /dev/null 2<&1
rapport="Erreurs :"
####################################################################################
# Déploiements de mises à jour a une date donnée
####################################################################################
datedujour=`date +"%Y%m%d"`
if [ $datedujour = "20100507" ] || [ $datedujour = "20100508" ] ;
then
# commandes qui ne seront exécutées qu'à une date donnée
fi
####################################################################################
# SAUVEGARDES COMMUNES A TOUS LES SERVEURS LINUX
####################################################################################
# scripts mmv
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des scripts mmv /root/bin" ;
rsync -v -rlt -z --delete /root/bin/ panoramix::Backups/`hostname -s`/root_bin
[ $? -ne 0 ] && rapport=$rapport" 1"
# crontab de root
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la crontab root" ;
rsync -v -rlt -z --delete /var/spool/cron/ panoramix::Backups/`hostname -s`/var_spool_cron
[ $? -ne 0 ] && rapport=$rapport" 2"
# configuration de la rotation des logs
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config /etc/logrotate.d" ;
rsync -v -rlt -z --delete /etc/logrotate.d/ panoramix::Backups/`hostname -s`/etc_logrotate.d
[ $? -ne 0 ] && rapport=$rapport" 3"
# configurations apaches
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config apache /etc/httpd" ;
rsync -v -rlt -z --delete /etc/httpd/ panoramix::Backups/`hostname -s`/etc_httpd
[ $? -ne 0 ] && rapport=$rapport" 4"
# configuration samba
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config samba /etc/samba" ;
rsync -v -rlt -z --delete /etc/samba/ panoramix::Backups/`hostname -s`/etc_samba
[ $? -ne 0 ] && rapport=$rapport" 5"
# configuration du systeme de fichiers
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/fstab" ;
rsync -v -rlt -z --delete /etc/fstab panoramix::Backups/`hostname -s`/etc_fstab
[ $? -ne 0 ] && rapport=$rapport" 6"
# configuration des exports nfs
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/exports" ;
rsync -v -rlt -z --delete /etc/exports panoramix::Backups/`hostname -s`/etc_exports
[ $? -ne 0 ] && rapport=$rapport" 7"
# configuration des demons
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des /etc/initab" ;
rsync -v -rlt -z --delete /etc/inittab panoramix::Backups/`hostname -s`/etc_inittab
[ $? -ne 0 ] && rapport=$rapport" 8"
# configuration du resolver (man resolver)
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde du resolver /etc/resolv.conf" ;
rsync -v -rlt -z --delete /etc/resolv.conf panoramix::Backups/`hostname -s`/etc_resolv.conf
[ $? -ne 0 ] && rapport=$rapport" 9"
# configuration des hotes
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/hosts" ;
rsync -v -rlt -z --delete /etc/hosts panoramix::Backups/`hostname -s`/etc_hosts
[ $? -ne 0 ] && rapport=$rapport" 10"
# configuration de l'authentification AD
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de l'authentification AD" ;
rsync -v -rlt -z --delete /etc/krb5.conf panoramix::Backups/`hostname -s`/etc_krb5.conf
[ $? -ne 0 ] && rapport=$rapport" 11"
rsync -v -rlt -z --delete /etc/nsswitch.conf panoramix::Backups/`hostname -s`/etc_nsswitch.conf
[ $? -ne 0 ] && rapport=$rapport" 12"
rsync -v -rlt -z --delete /etc/sudoers panoramix::Backups/`hostname -s`/etc_sudoers
[ $? -ne 0 ] && rapport=$rapport" 13"
rsync -v -rlt -z --delete /etc/pam.d/ panoramix::Backups/`hostname -s`/etc_pam.d
[ $? -ne 0 ] && rapport=$rapport" 14"
rsync -v -rlt -z --delete /etc/security/ panoramix::Backups/`hostname -s`/etc_security
[ $? -ne 0 ] && rapport=$rapport" 15"
# repositories yum
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des repository yum" ;
rsync -v -rlt -z --delete /etc/yum.conf panoramix::Backups/`hostname -s`/etc_yum.conf
[ $? -ne 0 ] && rapport=$rapport" 16"
rsync -v -rlt -z --delete /etc/yum.repos.d/ panoramix::Backups/`hostname -s`/etc_yum.repos.d
[ $? -ne 0 ] && rapport=$rapport" 17"
# scripts utiles
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de .bashrc et .screenrc" ;
rsync -v -rlt -z --delete /root/.bashrc panoramix::Backups/`hostname -s`/root_dot_bashrc
[ $? -ne 0 ] && rapport=$rapport" 18"
rsync -v -rlt -z --delete /root/.screenrc panoramix::Backups/`hostname -s`/root_dot_screenrc
[ $? -ne 0 ] && rapport=$rapport" 19"
# parametrages centreon / nagios
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des paramétrages centreon nagios" ;
rsync -v -rlt -z --delete /usr/local/nagios/etc/ panoramix::Backups/`hostname -s`/usr_local_nagios_etc
[ $? -ne 0 ] && rapport=$rapport" 20"
rsync -v -rlt -z --delete /usr/local/nagios/libexec/ panoramix::Backups/`hostname -s`/usr_local_nagios_libexec
[ $? -ne 0 ] && rapport=$rapport" 21"
####################################################################################
# mise à jour du fichier permettant a centreon de verifier si la sauvegarde est correcte
####################################################################################
# si le rapport contient des erreurs, on indique KO dans le fichier de contrôle
if [ "${rapport}" != "Erreurs :" ] ;
then
echo `date +"%Y%m%d %H%M%S"`:$nom:"Le rapport contient des erreurs" ;
echo "ko --- " > /root/bin/dateSauvegarde
echo $rapport >> /root/bin/dateSauvegarde
else
echo `date +"%Y%m%d %H%M%S"`:$nom:"Il n'y a pas eu d'erreurs pendant la sauvegarde" ;
echo "ok" > /root/bin/dateSauvegarde
fi
####################################################################################
# SAUVEGARDES PARTICULIERES AU SERVEUR : lancé après pour pouvoir amender le rapport
# de sauvegarde precedent si necessaire
####################################################################################
# Si le fichier /root/bin/mmv_sauvegardes.sh existe, on le lance
if [ -f /root/bin/mmv_sauvegardes.sh ] ;
then
echo `date +"%Y%m%d %H%M%S"`:$nom:"Un script de sauvegarde local existe, on le lance : /root/bin/mmv_sauvegardes.sh" ;
[ ! -x /root/bin/mmv_sauvegardes.sh ] && chmod +x /root/bin/mmv_sauvegardes.sh
/root/bin/mmv_sauvegardes.sh
[ $? -ne 0 ] && rapport=$rapport" 99"
else
echo `date +"%Y%m%d %H%M%S"`:$nom:"Aucun script de sauvegarde specifique a ce serveur trouve" ;
fi
# copie du fichier de rapport de sauvegarde sur le serveur de sauvegarde
rsync -v -rlt -z --delete /root/bin/dateSauvegarde panoramix::Backups/`hostname -s`/dateSauvegarde
# Fichier stocké sur le serveur de sauvegarde (\\panoramix\Backup-Siege\script)
# ce fichier est téléchargé toutes les nuits par TOUS les serveurs linux, et est
# ensuite exécuté.
# Cela permet de centraliser dans un seul fichier toutes les opérations de sauvegardes
# communes aux serveurs linux
#
# Il est appelé de la manière suivante depuis les serveurs linux :
# [root@front1 bin 10:19]# cat /root/bin/mmv_sauveSystem.sh
# rsync -v -rlt -z 10.1.1.23::Backups/script /root/bin/
# chmod +x /root/bin/script/saveSystem.sh
# /root/bin/script/saveSystem.sh
# et crontab -l
# 10 5 * * * /root/bin/mmv_sauveSystem.sh
#
nom=`hostname -s`:`basename $0`
# Send all output to a logfile and supress input
typeset LOG=/var/log/resalys/${nom}.log
[[ -t 1 ]] && echo "Writing to logfile '$LOG'."
exec >> $LOG 2>&1
exec < /dev/null 2<&1
rapport="Erreurs :"
####################################################################################
# Déploiements de mises à jour a une date donnée
####################################################################################
datedujour=`date +"%Y%m%d"`
if [ $datedujour = "20100507" ] || [ $datedujour = "20100508" ] ;
then
# commandes qui ne seront exécutées qu'à une date donnée
fi
####################################################################################
# SAUVEGARDES COMMUNES A TOUS LES SERVEURS LINUX
####################################################################################
# scripts mmv
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des scripts mmv /root/bin" ;
rsync -v -rlt -z --delete /root/bin/ panoramix::Backups/`hostname -s`/root_bin
[ $? -ne 0 ] && rapport=$rapport" 1"
# crontab de root
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la crontab root" ;
rsync -v -rlt -z --delete /var/spool/cron/ panoramix::Backups/`hostname -s`/var_spool_cron
[ $? -ne 0 ] && rapport=$rapport" 2"
# configuration de la rotation des logs
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config /etc/logrotate.d" ;
rsync -v -rlt -z --delete /etc/logrotate.d/ panoramix::Backups/`hostname -s`/etc_logrotate.d
[ $? -ne 0 ] && rapport=$rapport" 3"
# configurations apaches
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config apache /etc/httpd" ;
rsync -v -rlt -z --delete /etc/httpd/ panoramix::Backups/`hostname -s`/etc_httpd
[ $? -ne 0 ] && rapport=$rapport" 4"
# configuration samba
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config samba /etc/samba" ;
rsync -v -rlt -z --delete /etc/samba/ panoramix::Backups/`hostname -s`/etc_samba
[ $? -ne 0 ] && rapport=$rapport" 5"
# configuration du systeme de fichiers
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/fstab" ;
rsync -v -rlt -z --delete /etc/fstab panoramix::Backups/`hostname -s`/etc_fstab
[ $? -ne 0 ] && rapport=$rapport" 6"
# configuration des exports nfs
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/exports" ;
rsync -v -rlt -z --delete /etc/exports panoramix::Backups/`hostname -s`/etc_exports
[ $? -ne 0 ] && rapport=$rapport" 7"
# configuration des demons
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des /etc/initab" ;
rsync -v -rlt -z --delete /etc/inittab panoramix::Backups/`hostname -s`/etc_inittab
[ $? -ne 0 ] && rapport=$rapport" 8"
# configuration du resolver (man resolver)
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde du resolver /etc/resolv.conf" ;
rsync -v -rlt -z --delete /etc/resolv.conf panoramix::Backups/`hostname -s`/etc_resolv.conf
[ $? -ne 0 ] && rapport=$rapport" 9"
# configuration des hotes
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/hosts" ;
rsync -v -rlt -z --delete /etc/hosts panoramix::Backups/`hostname -s`/etc_hosts
[ $? -ne 0 ] && rapport=$rapport" 10"
# configuration de l'authentification AD
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de l'authentification AD" ;
rsync -v -rlt -z --delete /etc/krb5.conf panoramix::Backups/`hostname -s`/etc_krb5.conf
[ $? -ne 0 ] && rapport=$rapport" 11"
rsync -v -rlt -z --delete /etc/nsswitch.conf panoramix::Backups/`hostname -s`/etc_nsswitch.conf
[ $? -ne 0 ] && rapport=$rapport" 12"
rsync -v -rlt -z --delete /etc/sudoers panoramix::Backups/`hostname -s`/etc_sudoers
[ $? -ne 0 ] && rapport=$rapport" 13"
rsync -v -rlt -z --delete /etc/pam.d/ panoramix::Backups/`hostname -s`/etc_pam.d
[ $? -ne 0 ] && rapport=$rapport" 14"
rsync -v -rlt -z --delete /etc/security/ panoramix::Backups/`hostname -s`/etc_security
[ $? -ne 0 ] && rapport=$rapport" 15"
# repositories yum
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des repository yum" ;
rsync -v -rlt -z --delete /etc/yum.conf panoramix::Backups/`hostname -s`/etc_yum.conf
[ $? -ne 0 ] && rapport=$rapport" 16"
rsync -v -rlt -z --delete /etc/yum.repos.d/ panoramix::Backups/`hostname -s`/etc_yum.repos.d
[ $? -ne 0 ] && rapport=$rapport" 17"
# scripts utiles
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de .bashrc et .screenrc" ;
rsync -v -rlt -z --delete /root/.bashrc panoramix::Backups/`hostname -s`/root_dot_bashrc
[ $? -ne 0 ] && rapport=$rapport" 18"
rsync -v -rlt -z --delete /root/.screenrc panoramix::Backups/`hostname -s`/root_dot_screenrc
[ $? -ne 0 ] && rapport=$rapport" 19"
# parametrages centreon / nagios
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des paramétrages centreon nagios" ;
rsync -v -rlt -z --delete /usr/local/nagios/etc/ panoramix::Backups/`hostname -s`/usr_local_nagios_etc
[ $? -ne 0 ] && rapport=$rapport" 20"
rsync -v -rlt -z --delete /usr/local/nagios/libexec/ panoramix::Backups/`hostname -s`/usr_local_nagios_libexec
[ $? -ne 0 ] && rapport=$rapport" 21"
####################################################################################
# mise à jour du fichier permettant a centreon de verifier si la sauvegarde est correcte
####################################################################################
# si le rapport contient des erreurs, on indique KO dans le fichier de contrôle
if [ "${rapport}" != "Erreurs :" ] ;
then
echo `date +"%Y%m%d %H%M%S"`:$nom:"Le rapport contient des erreurs" ;
echo "ko --- " > /root/bin/dateSauvegarde
echo $rapport >> /root/bin/dateSauvegarde
else
echo `date +"%Y%m%d %H%M%S"`:$nom:"Il n'y a pas eu d'erreurs pendant la sauvegarde" ;
echo "ok" > /root/bin/dateSauvegarde
fi
####################################################################################
# SAUVEGARDES PARTICULIERES AU SERVEUR : lancé après pour pouvoir amender le rapport
# de sauvegarde precedent si necessaire
####################################################################################
# Si le fichier /root/bin/mmv_sauvegardes.sh existe, on le lance
if [ -f /root/bin/mmv_sauvegardes.sh ] ;
then
echo `date +"%Y%m%d %H%M%S"`:$nom:"Un script de sauvegarde local existe, on le lance : /root/bin/mmv_sauvegardes.sh" ;
[ ! -x /root/bin/mmv_sauvegardes.sh ] && chmod +x /root/bin/mmv_sauvegardes.sh
/root/bin/mmv_sauvegardes.sh
[ $? -ne 0 ] && rapport=$rapport" 99"
else
echo `date +"%Y%m%d %H%M%S"`:$nom:"Aucun script de sauvegarde specifique a ce serveur trouve" ;
fi
# copie du fichier de rapport de sauvegarde sur le serveur de sauvegarde
rsync -v -rlt -z --delete /root/bin/dateSauvegarde panoramix::Backups/`hostname -s`/dateSauvegarde
Script spécifique à un serveur donné
Et voici un exemple de script spécifique à un serveur contenant des bases mysql :
#/bin/sh
# mmv_sauvegardes.sh
# script fermant les connexions a la base et lancant le backup de la base et le dbmaintenance
nom=`basename $0`
# Send all output to a logfile and supress input
typeset LOG=/var/log/mmv_sauvegardes.log
[[ -t 1 ]] && echo "Writing to logfile '$LOG'."
exec >> $LOG 2>&1
exec < /dev/null 2<&1
# -----------------------------------------------
# backup des bases
# -----------------------------------------------
echo `date +"%Y%m%d %H%M%S"`:$nom:" DEBUT DU SRIPT DE SAUVEGARDE"
# sauvegarde de glpi
echo `date +"%Y%m%d %H%M%S"`:$nom:" lancement des dumps de glpidb"
mysqldump --add-drop-table --lock-tables -u XXX -pXXX --databases glpidb > /usr/local/lib/backups/mmv_backup_glpi_`date +"%Y%m%d"`.sql
# suppression des anciens fichiers de backup
echo `date +"%Y%m%d %H%M%S"`:$nom:" nettoyage anciens dumps"
find /usr/local/lib/backups/ -type f -mtime +7 | xargs rm -f
# copie de certains fichiers sur le serveur de sauvegarde
echo `date +"%Y%m%d %H%M%S"`:$nom:" copie glpi sur panoramix"
rsync -v -rlt -z --delete /var/www/html/glpi/ panoramix::Backups/tintin/glpi
echo `date +"%Y%m%d %H%M%S"`:$nom:" copie des dumps sur panoramix"
rsync -v -rlt -z --delete /usr/local/lib/backups/ panoramix::Backups/tintin/bases
echo `date +"%Y%m%d %H%M%S"`:$nom:" FIN DU SCRIPT"
Aucun commentaire:
Enregistrer un commentaire