BaculaClientServeur
Un article de EoleWiki.
Sommaire |
Installation de Bacula en mode Client/Serveur
Introduction
Bacula est un logiciel libre de sauvegarde. Il est possible de le faire fonctionner sur une seule machine et de copier les sauvegardes par d'autres protocole réseau : rsync, samba, ssh, etc.
Le but est ici de créer un serveur de sauvegarde et ses clients. Le serveur commande toutes les opérations, le client ne fait que suivre les instructions du serveur.
Bacula est composé de 3 démons, le client, le directeur, et l'enregistreur de données. Dans cet exemple directeur et enregistreur sont rassemblés, leur séparation ne présentant pas de difficultés particulière.
Le résultat
Les sauvegardes des clients sont programmées sur le serveur. Il est possible d'avoir autant de programmation que de clients ou d'en avoir une seule pour tes les clients.
Lorsqu'une sauvegarde est déclenchée, le serveur se connecte au client, exécute la commande 'ClientRunBeforeJob' (si spécifiée), rapatrie les fichiers/dossiers et exécute la commande 'ClientRunAfterJob'.
Un mail est envoyé en cas d'erreur pendant la sauvegarde (comportement paramétrable).
Le client
L'installation du client est fait à partir d'un rpm, ici 'bacula-client-1.36.3-1.i586.rpm'.
Dans le fichier /etc/bacula/bacula-fd.conf renseigner 'Name' et 'Password' :
Director {
Name = 10.121.11.99-dir #nom du serveur tel qu'il apparait dans SON fichier de conf
Password = "yVfLTTn8wigmB740vPUmOGCe8llp5ozhe6577BiWaGCm" #mot de passe utilisé pour la connection à ce client
}
FileDaemon {
Name = serv-pedago-fd #nom du client
FDport = 9102
WorkingDirectory = /var/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}
Deux scripts ont été écrit:
pre.sh exécuté par 'ClientRunBeforeJob'
#!/bin/bash [ -e /etc/init.d/smb ] && /etc/init.d/smb stop &>/dev/null [ -e /etc/init.d/ldap ] && /etc/init.d/ldap stop &>/dev/null [ -e /etc/init.d/sympa ] && /etc/init.d/sympa stop &>/dev/null [ -e /etc/init.d/exim ] && /etc/init.d/exim stop &>/dev/null
post.sh exécuté par 'ClientRunAfterJob'
#!/bin/bash [ -e /etc/init.d/smb ] && /etc/init.d/smb start &>/dev/null [ -e /etc/init.d/ldap ] && /etc/init.d/ldap start &>/dev/null [ -e /etc/init.d/sympa ] && /etc/init.d/sympa start &>/dev/null [ -e /etc/init.d/exim ] && /etc/init.d/exim start &>/dev/null
Voici un fichier de configuration client complet :
Director {
Name = 10.121.11.99-dir
Password = "yVfLTTn8wigmB740vPUmOGCe8llp5ozhe6577BiWaGCm"
}
Director { #connection restreinte, utilisée pour le monitoring du client
Name = 10.121.11.99-mon
Password = "CNgkB+oO2bAMMu0fdm7aNkIwwfrz3eyqT/bxbco6uBEr"
Monitor = yes
}
FileDaemon { #configuration globale du client
Name = serv-pedago-fd
FDport = 9102
WorkingDirectory = /var/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}
Messages {
Name = Standard
director = 10.121.11.99-dir = all, !skipped #envoyer tous les messages sauf la liste des fichiers "sautés"
}
Le serveur
Bacula sait utiliser mysql, postgresql, sqlite et updatedb. Cet exemple est basé sur sqlite.
Comme pour le client, les champs 'Name' et 'Password' ont été renseignés. Les fichiers concernés sont :
- /etc/bacula/bacula-dir.conf
- /etc/bacula/bacula-fd.conf
- /etc/bacula/bacula-sd.conf
Dans ses fichiers de configuration, Bacula accept les inclusions de fichiers supplémentaires avec la syntaxe suivante :
@/chemin/fichier.conf
Pour une meilleur lisibilité une inclusion par client a été faite au début du fichier /etc/bacula/bacula-dir.conf :
Schedule {
Name = "serv-pedago-schedule"
Run = Full 1st sun at 1:05 #une sauvegarde complète tous les premiers dimanche du mois
Run = Incremental tue-sat at 1:05 #incrémentale du mardi au samedi (matin)
}
JobDefs { #définition de la tâche
Name = "serv-pedago-defs"
Type = Backup
Client = serv-pedago-fd
FileSet = "serv-pedago-file"
Schedule = "serv-pedago-schedule"
Storage = File
Messages = Standard
Pool = serv-pedago-pool
Priority = 10
}
Job {
Name = "serv-pedago"
JobDefs = "serv-pedago-defs"
Write Bootstrap = "/var/bacula/Client1.bsr"
ClientRunBeforeJob = "/etc/bacula/pre.sh"
ClientRunAfterJob = "/etc/bacula/post.sh"
}
Job { #job type de restauration
Name = "RestoreFiles-pedago"
Type = Restore
Client=serv-pedago-fd
FileSet="serv-pedago-file"
Storage = File
Pool = serv-pedago-pool
Messages = Standard
Where = /home/restauration #attention certains fichiers sont sauvegardés avec leur ACLs donc les
} #fichiers doivent être restaurés sur un système de fichiers compatible ACL
FileSet { #liste de fichiers avec option de traitement
Name = "serv-pedago-file"
Include {
Options {
signature = MD5
compression = GZIP
aclsupport = yes #prise en compte des ACLs
}
File = /home/
}
Include {
Options {
signature = MD5
compression = GZIP
}
File = /etc/eole/config.eol
File = /etc/mail/sympa_aliases
File = /var/lib/sympa/arc
File = /var/lib/sympa/expl
File = /var/lib/mysql
File = /var/lib/ldap/
File = /var/www/ead/config
File = /var/www/ead/modeles
}
}
Client {
Name = serv-pedago-fd #nom du client identique à celui figurant dans SON fichier de configuration
Address = 10.121.11.4
FDPort = 9102
Catalog = MyCatalog
Password = "yVfLTTn8wigmB740vPUmOGCe8llp5ozhe6577BiWaGCm" #mot de passe
File Retention = 30 days
Job Retention = 6 months
AutoPrune = yes
}
Pool { #pool de sauvegarde, autrement dit "ensemble de support de sauvegarde"
Name = serv-pedago-pool #ce type d'ensemble peut contenir plusieurs média quand il s'agit de bandes
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 100 days
Accept Any Volume = yes
LabelFormat = serv-pedago
}
Une sauvegarde complète de la base de données du serveur a été programmée chaque jour.
Retour d'expérience
Le 18 janvier 2005, restauration du dossier var/lib/mysql/b2i. L'opération a été effectuée depuis un serveur de sauvegarde sur un client distant. Les fichiers ont été placés dans un répertoire déporté de la racine /home/restauration, pour éviter d'écraser les originaux. Les droits ont été correctement restaurés. A partir du lancement de la commande jusqu'à l'apparition des premiers fichiers sur le client, il s'est écoulé un délais de quelques minutes, correspondant au parcours de l'archive par Bacula et l'extraction des fichiers demandés, s'est écoulé.
