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é.