introduction
Après avoir élaboré un plan de récupération pour les différents composants de votre application, vous devez configurer le système de sauvegarde requis pour la prendre en charge. Ce tutoriel se concentrera sur l'utilisation de Bacula en tant que solution de sauvegarde. L’utilisation d’un système de sauvegarde à part entière, tel que Bacula, présente l’avantage de vous permettre de contrôler entièrement ce que vous sauvegardez et restaurez au niveau des fichiers, et vous permet de planifier des sauvegardes et des restaurations en fonction de ce qui vous convient le mieux.
Des solutions telles queDigitalOcean Droplet Backups (sauvegardes instantanées de l'ensemble de votre Droplet) sont faciles à mettre en place et peuvent être suffisantes pour vos besoins, si vous n'avez besoin que de sauvegardes hebdomadaires. Si vous optez pour les sauvegardes DigitalOcean, assurez-vous de configurer des sauvegardes à chaud de votre base de données en suivant la sectionCreate Hot Backups of Your Database.
Dans cette partie du didacticiel, nous allons configurer un Bacula pour maintenir des sauvegardes quotidiennes desrequired backups des serveurs qui composent la configuration de votre application (db1, app1, app2 et lb1), définis précédemment dans notre plan de récupération— essentiellement, il s'agit d'un tutoriel qui vous montre comment utiliser Bacula pour créer des sauvegardes d'une pile LAMP. Nous allons également utiliser Percona XtraBackup pour créer des sauvegardes à chaud de votre base de données MySQL. Enfin, nous utiliserons rsync pour créer une copie de vos sauvegardes, sur un serveur d'un centre de données distant. Cela ajoutera deux serveurs à votre configuration:backups etremotebackups (situés dans un centre de données séparé).
Commençons.
Installer Bacula sur le serveur de sauvegarde
Configurez Bacula sur votre serveurbackups en suivant ce tutoriel:How To Install Bacula Server on Ubuntu 14.04.
Suivez ensuite la sectionOrganize Bacula Director Configuration (Server) de ce tutoriel:How To Back Up an Ubuntu 14.04 Server with Bacula. Vous aurez besoin du nom du directeur lors de la configuration des clients Bacula (sur les serveurs que vous souhaitez sauvegarder). Arrêtez-vous lorsque vous atteignez la sectionInstall and Configure Bacula Client.
Notez que nous utiliserons le pool RemoteFile pour toutes les tâches de sauvegarde que nous allons configurer. Cela dit, vous voudrez peut-être modifier certains paramètres avant de continuer.
Installer le client Bacula sur chaque serveur
Installez le client Bacula sur chaque serveur que vous souhaitez sauvegarder (db1, app1, app2 et lb1) en suivant la sectionInstall and Configure Bacula Client de ce tutoriel:How To Back Up an Ubuntu 14.04 Server with Bacula. Arrêtez-vous lorsque vous atteignez la sectionAdd FileSets (Server).
Notez que vous aurez besoin desFileDaemon Name (généralement le nom d'hôte ajouté par «-fd») et desDirector Password (le mot de passe que le serveur Bacula utilisera pour se connecter à chaque client) dubacula-fd.conf
fichier sur chaque serveur.
Ajouter des clients Bacula au serveur de sauvegarde
Surbackups, le serveur Bacula, ajoutez unClient resource au fichier/etc/bacula/conf.d/clients.conf
pour chaque serveur sur lequel vous avez installé le client Bacula.
Ouvrez le fichierclients.conf
:
sudo vi /etc/bacula/conf.d/clients.conf
Voici un exemple de définition de la ressource Client pour le serveur de base de données,db1. Notez que la valeur deName doit correspondre au nom de la ressourceFileDaemon et lesPassword doivent correspondre au mot de passe de la ressourceDirector, sur le serveur client - ces valeurs se trouve dans/etc/bacula/bacula-fd.conf
sur chaque serveur client Bacula:
clients.conf — Example Client resource definition
Client {
Name = db1-fd
Address = db1.nyc3.example.com
FDPort = 9102
Catalog = MyCatalog
Password = "PDL47XPnjI0QzRpZVJKCDJ_xqlMOp4k46" # password for Remote FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
Créez une ressource client similaire pour chacun des serveurs clients Bacula restants. Dans notre exemple, il devrait y avoir quatre ressources Client lorsque nous avons terminé:db1-fd,app1-fd,app2-fd etlb1-fd. Ceci configure le Directeur Bacula, sur le serveurbackups, pour pouvoir se connecter au client Bacula sur chaque serveur.
Sauvegarder et quitter.
Plus de détails sur cette section peuvent être trouvés dans lesInstall and Configure Bacula Client dans lesHow To Back Up an Ubuntu Server with Bacula tutorial.
Créer des sauvegardes à chaud de votre base de données
Pour nous assurer de produire des résultats cohérents (c.-à-d. utilisables) de notre base de données active, une attention particulière doit être apportée. Percona XtraBackup est un moyen simple et efficace de créer des sauvegardes à chaud avec MySQL.
Installer Percona XtraBackup
Sur votre serveur de base de données,db1, installez et configurez Percona XtraBackup en suivant ce tutoriel:How To Create Hot Backups of MySQL Databases with Percona XtraBackup on Ubuntu 14.04. Arrêtez-vous lorsque vous atteignez la sectionPerform Full Hot Backup.
Créer un script XtraBackup
Percona XtraBackup est prêt à créer des sauvegardes à chaud de votre base de données MySQL, qui seront finalement sauvegardées par Bacula (ou des sauvegardes DigitalOcean), mais les sauvegardes à chaud doivent être planifiées d'une manière ou d'une autre. Nous allons mettre en place la solution la plus simple: un script bash et un travail cron.
Créez un script bash appelérun_extra_backup.sh
dans/usr/local/bin
:
sudo vi /usr/local/bin/run_xtrabackup.sh
Ajoutez le script suivant. Assurez-vous de remplacer l'utilisateur et le mot de passe par tout ce que vous avez configuré lors de l'installation de XtraBackup:
/usr/local/bin/run_xtrabackup.sh
#!/bin/bash
# pre xtrabackup
chown -R mysql: /var/lib/mysql
find /var/lib/mysql -type d -exec chmod 770 "{}" \;
# delete existing full backup
rm -r /data/backups/full
# xtrabackup create backup
innobackupex --user=bkpuser --password=bkppassword --no-timestamp /data/backups/full
# xtrabackup prepare backup
innobackupex --apply-log /data/backups/full
Sauvegarder et quitter. L'exécution de ce script (avec les privilèges de superutilisateur) supprimera la sauvegarde XtraBackup existante à/data/backups/full
et créera une nouvelle sauvegarde complète. Vous trouverez plus de détails sur la création de sauvegardes avec XtraBackup dans la sectionPerform Full Hot Backup du didacticiel XtraBackup.
Rendre le script exécutable:
sudo chmod +x /usr/local/bin/run_xtrabackup.sh
Afin de sauvegarder correctement notre base de données, nous devons exécuter (et compléter) le script XtraBackup avant que Bacula ne tente de sauvegarder le serveur de base de données. Une bonne solution est de configurer votre tâche de sauvegarde Bacula pour exécuter le script en tant que «script de pré-sauvegarde», mais nous choisirons d'utiliser uncron job pour que les choses restent simples.
Créez un fichier de configuration cron (les fichiers dans/etc/cron.d
sont ajoutés au crontab de root):
sudo vi /etc/cron.d/xtrabackup
Ajoutez le travail cron suivant:
/etc/cron.d/xtrabackup
30 22 * * * root /usr/local/bin/run_xtrabackup.sh
Cela permet au script de s’exécuter en tant que root tous les jours à 22h30 (22e heure, 30e minute). Nous avons choisi cette heure car Bacula doit actuellement exécuter ses tâches de sauvegarde à 23 h 05 tous les jours. Nous discuterons de l'ajustement plus tard. Cela laisse 35 minutes à la fin du script XtraBackup.
Maintenant que les sauvegardes à chaud de la base de données sont configurées, examinons les FileSets de sauvegarde Bacula.
Configurer les FileSets Bacula
Bacula créera des sauvegardes des fichiers spécifiés dans les ensembles de fichiers associés aux travaux de sauvegarde à exécuter. Cette section couvrira la création de FileSets qui incluent lesrequired backups que nous avons identifiés dans nos plans de récupération. Plus de détails sur l'ajout de FileSets à Bacula peuvent être trouvés dans la sectionAdd FileSets (Server) du didacticiel Bacula.
Sur votre serveurbackups, ouvrez le fichierfilesets.conf
:
sudo vi /etc/bacula/conf.d/filesets.conf
Ensemble de fichiers du serveur de base de données
Les sauvegardes requises pour notre serveur de base de données, conformément à notre plan de récupération, incluent:
-
MySQL database: une copie de sauvegarde est créée par notre script XtraBackup en
/data/backups/full
, tous les jours à 22h30 -
MySQL configuration: situé dans
/etc/mysql
Nous inclurons également le script XtraBackup:/usr/local/bin/run_xtrabackup.sh
, et le fichier cron associé.
En gardant à l'esprit les sauvegardes requises, nous allons ajouter ce fichier "Base de données MySQL" à notre configuration Bacula:
filesets.conf — MySQL Database
FileSet {
Name = "MySQL Database"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /data/backups
File = /etc/mysql/my.cnf
File = /usr/local/bin/run_xtrabackup.sh
File = /etc/cron.d/xtrabackup
}
Exclude {
File = /data/backups/exclude
}
}
Passons maintenant au FileSet du serveur d’application.
Ensemble de fichiers du serveur d'applications
Les sauvegardes requises pour vos serveurs d'applications, en fonction de votre plan de récupération, incluent:
-
Application Files: situé dans
/var/www/html
dans notre exemple
En gardant à l'esprit les sauvegardes requises, nous allons ajouter ce FileSet «Apache DocumentRoot» à notre configuration Bacula:
filesets.conf — Apache DocumentRoot
FileSet {
Name = "Apache DocumentRoot"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /var/www/html
}
Exclude {
File = /var/www/html/exclude
}
}
Vous pouvez également inclure le fichier de configuration des ports Apache, mais celui-ci est facilement remplaçable.
Passons maintenant au FileSet du serveur d’équilibreur de charge.
Ensemble de fichiers du serveur d'équilibrage de charge
Les sauvegardes requises pour nos serveurs d'équilibrage de charge, conformément à notre plan de récupération du serveur d'équilibreur de charge, incluent:
-
SSL Certificate (PEM) and related files: situé dans
/root/certs
dans notre exemple -
HAProxy configuration file: situé dans
/etc/haproxy
En gardant à l'esprit les sauvegardes requises, nous allons ajouter ce FileSet «Apache DocumentRoot» à notre configuration Bacula:
filesets.conf — SSL Certs and HAProxy Config
FileSet {
Name = "SSL Certs and HAProxy Config"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /root/certs
File = /etc/haproxy
}
Exclude {
File = /root/exclude
}
}
Sauvegarder et quitter.
Maintenant, nos FileSets sont configurés. Passons maintenant à la création des jobs de sauvegarde Bacula qui utiliseront ces FileSets.
Créer des jobs de sauvegarde Bacula
Nous allons créer des travaux de sauvegarde Bacula qui seront exécutés et créer des sauvegardes de nos serveurs.
Créez un fichierjobs.conf
dans/etc/bacula/conf.d
:
sudo vi /etc/bacula/conf.d/jobs.conf
Travail de sauvegarde du serveur de base de données
Pour notre travail de sauvegarde du serveur de base de données, nous allons créer un nouveau travail nommé «Backup db1». La chose importante ici est que nous spécifions les bonsClient (db1-fd) etFileSet (base de données MySQL):
jobs.conf — Backup db1
Job {
Name = "Backup db1"
JobDefs = "DefaultJob"
Client = db1-fd
Pool = RemoteFile
FileSet="MySQL Database"
}
Nous allons maintenant configurer les travaux de sauvegarde du serveur d'applications.
Travaux de sauvegarde du serveur d'applications
Pour nos serveurs d'applications, nous allons créer deux travaux de sauvegarde nommés «Backup app1» et «Backup app2». L'important ici est que nous spécifions les bonsClients (app1-fd et app2-fd) etFileSet (Apache DocumentRoot).
App1 job:
jobs.conf — Backup app1
Job {
Name = "Backup app1"
JobDefs = "DefaultJob"
Client = app1-fd
Pool = RemoteFile
FileSet="Apache DocumentRoot"
}
App2 job:
jobs.conf — Backup app2
Job {
Name = "Backup app2"
JobDefs = "DefaultJob"
Client = app2-fd
Pool = RemoteFile
FileSet="Apache DocumentRoot"
}
Nous allons maintenant configurer le travail de sauvegarde du serveur de l'équilibreur de charge.
Job de sauvegarde du serveur d'équilibrage de charge
Pour notre travail de sauvegarde du serveur d'équilibrage de charge, nous allons créer un nouveau travail appelé «Sauvegarde lb1». La chose importante ici est que nous spécifions les bonsClient (lb1-fd) etFileSet (certificats SSL et HAProxy Config):
jobs.conf — Backup lb1
Job {
Name = "Backup lb1"
JobDefs = "DefaultJob"
Client = lb1-fd
Pool = RemoteFile
FileSet="SSL Certs and HAProxy Config"
}
Sauvegarder et quitter.
Nos tâches de sauvegarde sont maintenant configurées. La dernière étape consiste à redémarrer Bacula Director.
Redémarrer Bacula Director
Sur le serveurbackups, redémarrez Bacula Director pour appliquer toutes nos modifications:
sudo service bacula-director restart
À ce stade, vous souhaiterez tester vos connexions client et vos travaux de sauvegarde, qui sont tous deux couverts dans lesHow To Back Up a Server with Bacula tutorial. Ce tutoriel explique également comment restaurer des sauvegardes Bacula. Notez que la restauration de la base de données MySQL vous demandera de suivre l'étapePerform Backup Restoration du didacticiel Percona XtraBackup.
Vérifier le calendrier des sauvegardes
Le calendrier des sauvegardes Bacula peut être ajusté en modifiant la configuration de Bacula Director (/etc/bacula/bacula-dir.conf
). Tous les jobs de sauvegarde que nous avons créés utilisent le JobDef «DefaultJob», qui utilise la planification «WeeklyCycle», définie comme suit:
-
Sauvegarde complète le premier dimanche du mois à 23h05
-
Sauvegardes différentielles tous les autres dimanches à 23h05
-
Sauvegardes incrémentielles les autres jours, du lundi au samedi, à 23h05
Vous pouvez le vérifier en utilisant la console Bacula pour vérifier le statut du directeur. Il devrait générer tous vos travaux planifiés:
Director Status — Scheduled JobsScheduled Jobs:
Level Type Pri Scheduled Name Volume
===================================================================================
Incremental Backup 10 20-May-15 23:05 BackupLocalFiles MyVolume
Incremental Backup 10 20-May-15 23:05 Backup lb1 Remote-0002
Incremental Backup 10 20-May-15 23:05 Backup app2 Remote-0002
Incremental Backup 10 20-May-15 23:05 Backup app1 Remote-0002
Incremental Backup 10 20-May-15 23:05 Backup db1 Remote-0002
N'hésitez pas à ajouter ou à ajuster le calendrier de vos tâches de sauvegarde. Il serait judicieux de modifier la planification des serveurs d'applications pour qu'elle se produise en même temps que le script Percona XtraBackup est exécuté (22h30). Cela évitera que les sauvegardes de l'application et de la base de données soient incohérentes.
Configurer les sauvegardes à distance
Nous sommes maintenant prêts à configurer un serveur distant qui stockera des copies de nos sauvegardes Bacula. Ce serveur distant doit se trouver dans une région géographiquement distincte afin que vous disposiez d'une copie de vos sauvegardes critiques, même en cas de sinistre dans votre centre de données de production. Dans notre exemple, nous utiliserons la région San Francisco (SFO1) de DigitalOcean pour notre serveurremotebackups.
Nous allons expliquer une méthode simple pour envoyer nos sauvegardes depuis notre serveurbackups vers notre serveurremotebackups en utilisant les clés SSH publiques, rsync et cron.
Sur le serveurremotebackups,create a user qui sera utilisé pour la connexion rsync.
Ensuite, sur le serveurbackups, générez une paire de clés SSH sans mot de passe en tant que root. Installez la clé publique sur l'utilisateurremotebackupsque vous venez de créer. Ceci est couvert dans notre tutoriel surHow To Set Up SSH Keys.
Sur le serveurbackups, écrivez une commande rsync qui copie les données de sauvegarde Bacula (/bacula/backup
) quelque part sur le serveurremotebackups. L'utilisation de Rsync est couverte dans nosHow To Use Rsync tutorial. La commande ressemblera probablement à ceci:
rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup
Ajoutez la commande à un script, tel que/usr/local/bin/rsync_backups.sh
et rendez-le exécutable.
Enfin, vous voudrez configurer une tâche cron qui exécute le scriptrsync_backups.sh
en tant que root, une fois les tâches de sauvegarde Bacula généralement terminées. Ceci est couvert dans nosHow To Schedule Routine Tasks With Cron tutorial.
Après avoir configuré tout cela, vérifiez qu'il existe une copie de vos sauvegardes sur le serveurremotebackups le jour suivant.
autres considérations
Nous n’avons pas parlé des exigences en matière de disque pour vos sauvegardes. Vous voudrez certainement revoir l'espace disque utilisé par vos sauvegardes et réviser votre planning d'installation et de sauvegardes en fonction de vos besoins et de vos ressources.
Outre la création de sauvegardes de vos serveurs d'applications, vous souhaiterez probablement configurer des sauvegardes pour tous les autres serveurs ajoutés à votre configuration. Par exemple, vous devez configurer Bacula pour créer des sauvegardes de vos serveurs de surveillance et de journalisation centralisés une fois que vous les avez opérationnel.
Conclusion
Vous devriez maintenant avoir des sauvegardes quotidiennes et une copie à distance de ces sauvegardes de vos serveurs d'applications de production. Assurez-vous de pouvoir restaurer les fichiers et ajoutez les étapes de restauration de vos données à vos plans de récupération.
Passez au didacticiel suivant pour démarrer la configuration de la surveillance de la configuration de votre serveur de production:Building for Production: Web Applications — Monitoring.