Comment sauvegarder un serveur LAMP avec Bacula sur Ubuntu 14.04

introduction

Une fois votre serveur d’applications opérationnel, une étape importante consiste à configurer un système de sauvegarde. Un système de sauvegarde vous permettra de créer des copies de sauvegarde périodiques de vos données et de restaurer les données à partir de ces sauvegardes. Comme les données peuvent être perdues en raison d’une erreur de l’utilisateur ou de la défaillance matérielle éventuelle de tout système informatique, vous souhaiterez configurer les sauvegardes en tant que filet de sécurité.

Ce tutoriel vous montrera comment créer des sauvegardes appropriées d’une application PHP, en exécutant une pile LAMP sur un seul serveur Ubuntu 14.04, en utilisant un serveur de sauvegardes distinct qui exécute Bacula. L’un des avantages de l’utilisation d’un système de sauvegarde tel que Bacula est qu’il vous donne le contrôle total sur ce qui doit être sauvegardé et restauré, au niveau du fichier individuel, et sur le calendrier de création des sauvegardes. La granularité au niveau des fichiers lors de la création de sauvegardes nous permet de limiter nos sélections de sauvegarde aux seuls fichiers nécessaires, ce qui permet d’économiser de l’espace disque par rapport à la sauvegarde de l’ensemble du système de fichiers.

image: https: //assets.digitalocean.com/articles/architecture/production/backup_system.png [Diagramme de sauvegarde]

Si cela vous semble excessif, vous pouvez envisager de DigitalOcean Droplet Backups (sauvegardes instantanées de l’intégralité de votre compte Droplet), qui doivent être activé lorsque vous créez votre Droplet. Ces sauvegardes sont faciles à configurer et peuvent suffire à vos besoins si vous n’avez besoin que de sauvegardes hebdomadaires. Si vous optez pour les sauvegardes DigitalOcean, veillez à configurer les sauvegardes à chaud de votre base de données en suivant la section "Créer des sauvegardes à chaud de votre base de données" *. Cette opération est nécessaire pour garantir la cohérence (utilisable) des sauvegardes de votre base de données.

Conditions préalables

Ce tutoriel suppose que vous exécutez une application PHP, telle que WordPress, exécutée sur une pile LAMP (Linux, Apache, MySQL / MariaDB et PHP) sur un seul serveur Ubuntu 14.04, avec la mise en réseau privée activée. Nous l’appellerons le serveur * LAMP *. Pour notre exemple, nous allons créer des sauvegardes d’un serveur WordPress créé en suivant ces tutoriels:

Si vous utilisez une autre application PHP ou utilisez Nginx à la place d’Apache, ce didacticiel fonctionnera sans problème en supposant que vous apportiez les modifications nécessaires à votre sélection de sauvegarde.

Bien sûr, vous aurez besoin d’un accès sudo à un serveur sur lequel le logiciel serveur Bacula sera installé, que nous appellerons le serveur * backups *. Idéalement, il se trouvera dans le même centre de données que votre serveur LAMP et la mise en réseau privée sera activée. Les sauvegardes créées seront hébergées sur ce serveur. Par conséquent, il aura besoin de suffisamment d’espace disque pour stocker plusieurs copies de votre sélection de sauvegarde.

Sélection de sauvegarde

Comme indiqué dans l’introduction, notre sélection de sauvegarde (les fichiers qui seront copiés chaque fois qu’une sauvegarde est créée) ne comprendra que les fichiers nécessaires à la restauration de votre application à un état antérieur. En bref, cela signifie que nous allons sauvegarder les données suivantes:

  • * Fichiers d’application PHP: * Ce sera le DocumentRoot de votre serveur Web. Sur Ubuntu, ce sera + / var / www / html par défaut

  • * Base de données MySQL: * Bien que les fichiers de données MySQL soient généralement stockés dans + / var / lib / mysql +, nous devons créer une sauvegarde à chaud de la base de données à un autre emplacement. Les sauvegardes à chaud feront partie de notre sélection de sauvegardes

Par commodité, nous allons également inclure les fichiers de configuration Apache et MySQL dans notre sélection de sauvegarde. Si vous avez d’autres fichiers importants, tels que des fichiers de clé SSL et de certificat, veillez à les inclure également.

Le reste des fichiers sur le serveur peut être remplacé en suivant les étapes d’installation du logiciel de la configuration initiale. En cas de défaillance du serveur, nous pourrions créer un serveur LAMP de remplacement en suivant les didacticiels prérequis, puis en restaurant les sauvegardes et en redémarrant les services appropriés.

Si vous n’êtes pas sûr de savoir pourquoi nous incluons les fichiers susmentionnés dans la sélection de sauvegarde, consultez la page https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-recovery- Planning de la planification de la récupération. ] segment de la série de didacticiels Création de plusieurs parties * pour la production: applications Web *. Il décrit comment un plan de récupération peut être développé pour une application Web, en prenant pour exemple une configuration multi-serveur.

Configurons les sauvegardes à chaud de notre base de données.

Créer des sauvegardes à chaud de la 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 * LAMP *, installez et configurez Percona XtraBackup en suivant ce tutoriel: https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona -xtrabackup-on-ubuntu-14-04 [Comment créer des sauvegardes à chaud des bases de données MySQL avec Percona XtraBackup sur Ubuntu 14.04]. Arrêtez-vous lorsque vous atteignez la section * Perform 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=  --password= --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 dans + / data / backups / full + et créera une nouvelle sauvegarde complète. En bref, ce script conservera une copie unique de la sauvegarde à chaud de la base de données. Vous trouverez plus de détails sur la création de sauvegardes avec XtraBackup dans la page https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on- ubuntu-14-04 # perform-full-hot-backup [section Effectuer une sauvegarde à chaud complète] 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 la base de données. Une bonne solution consiste à configurer votre travail de sauvegarde Bacula pour qu’il exécute le script en tant que «script de pré-sauvegarde», mais nous choisirons d’utiliser un https://www.digitalocean.com/community/tutorials/how-to-schedule- tâches de routine avec cron-and-anacron-on-vps [tâche cron] pour que cela reste simple.

Créez un fichier de configuration cron (les fichiers dans + / etc / cron.d + seront ajoutés à la crontab de root):

sudo vi /etc/cron.d/xtrabackup

Ajoutez le travail cron suivant:

/etc/cron.d/xtrabackup

   * * *   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 le travail de sauvegarde par défaut de Bacula est programmé pour s’exécuter à 23h05 tous les jours; nous en discuterons 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, installons Bacula sur notre serveur de sauvegardes.

Installer Bacula sur le serveur de sauvegarde

Sur votre serveur * de sauvegarde *, configurez le serveur Bacula en suivant ce didacticiel: Comment savoir Installez Bacula Server sur Ubuntu 14.04.

Suivez ensuite la section * Organiser la configuration Bacula Director (Serveur) * de ce didacticiel: https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with -bacula # organiz-bacula-director-configuration- (serveur) [Comment sauvegarder un serveur Ubuntu 14.04 avec 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 accédez à la section * Installer et configurer 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 le serveur LAMP

Sur votre serveur * LAMP *, installez le client Bacula en suivant la section * Installer et configurer le client Bacula * de ce didacticiel: https://www.digitalocean.com/community/tutorials/how-to-back-up-an- ubuntu-14-04-server-with-bacula # client-install-and-configure-bacula [Comment sauvegarder un serveur Ubuntu 14.04 avec Bacula]. Arrêtez-vous lorsque vous atteignez la section * Add FileSets (Server) *.

Notez que vous aurez besoin du nom * FileDaemon * (généralement le nom d’hôte ajouté par “-fd”) et du * Mot de passe administrateur * (le mot de passe que le serveur Bacula utilisera pour se connecter au client Bacula) à partir du `+ bacula-fd Fichier .conf + `sur le serveur LAMP.

Ajouter un client de sauvegarde au serveur de sauvegarde

Sur votre serveur * backups *, le serveur Bacula, ajoutez une * ressource client * pour le serveur LAMP au fichier + / etc / bacula / conf.d / clients.conf +.

Ouvrez le fichier + clients.conf +:

sudo vi /etc/bacula/conf.d/clients.conf

La définition de ressource client pour le serveur LAMP doit ressembler au bloc de code suivant. Notez que la valeur de * Nom * doit correspondre au nom de la ressource * FileDaemon * et que le * Mot de passe * doit correspondre au mot de passe de la ressource * Director * sur le serveur LAMP. Ces valeurs peuvent être trouvées dans `+ / etc / bacula / bacula-fd.conf + `sur le serveur LAMP:

clients.conf - Exemple de définition de ressource client

Client {
 Name = -fd
 Address =
 FDPort = 9102
 Catalog = MyCatalog
 Password = ""          # password for Remote FileDaemon
 File Retention = 30 days            # 30 days
 Job Retention = 6 months            # six months
 AutoPrune = yes                     # Prune expired Jobs/Files
}

Sauvegarder et quitter. Ceci configure le directeur Bacula sur le serveur * backups * pour pouvoir se connecter au client Bacula sur chaque serveur.

Pour plus d’informations sur cette section, reportez-vous à la section * Installer et configurer Bacula Client * sur le site https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04. -with-bacula # install-and-configure-bacula-client [Comment sauvegarder un serveur Ubuntu avec Bacula].

Maintenant, configurons 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 comprenant les fichiers dont nous avons déterminé qu’ils faisaient partie de notre * sélection de sauvegarde * précédemment. Pour plus d’informations sur l’ajout de fichiers à Bacula, consultez la page https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula#add- filesets- (server) [Ajouter des FileSets (Server)] du didacticiel Bacula.

Sur votre serveur * backups *, ouvrez le fichier + filesets.conf +:

sudo vi /etc/bacula/conf.d/filesets.conf

Les sauvegardes requises pour notre serveur LAMP, selon notre sélection de sauvegarde, incluent:

  • * Fichiers d’application PHP: * + / var / www / html

  • * Base de données MySQL: * + / data / backups / full + - une sauvegarde à chaud complète est créée tous les jours à 22h30 par notre script XtraBackup

Nous allons également inclure les fichiers suivants, pour plus de commodité:

  • * Configuration MySQL: * + / etc / mysql

  • * Configuration Apache: * + / etc / apache2 +

  • * Script XtraBackup: * + / usr / local / bin / run_xtrabackup.sh +

  • * Fichier cron XtraBackup: * + / etc / cron.d / xtrabackup +

En gardant à l’esprit notre sélection de sauvegarde, nous allons ajouter le FileSet suivant à notre configuration Bacula:

filesets.conf - Base de données MySQL

FileSet {
 Name = "LAMP Files"
 Include {
   Options {
     signature = MD5
     compression = GZIP
   }






 }
 Exclude {

 }
}

Sauvegarder et quitter. Notez que toutes les directives * Fichier * en surbrillance sont dans le bloc * Inclure *. Ce sont tous les fichiers que nous voulons sauvegarder. Si vous souhaitez exclure des fichiers du travail de sauvegarde, ceux existant dans les répertoires inclus, ajoutez-les au bloc * Exclude *.

Maintenant, notre FileSet est configuré. Passons maintenant à la création du travail de sauvegarde Bacula qui utilisera ce FileSet.

Créer un travail de sauvegarde Bacula

Nous allons créer un travail de sauvegarde Bacula qui sera exécuté et créer des sauvegardes de notre serveur LAMP.

Créez un fichier + jobs.conf + dans + / etc / bacula / conf.d +:

sudo vi /etc/bacula/conf.d/jobs.conf

Job de sauvegarde du serveur LAMP

Pour notre travail de sauvegarde de serveur LAMP, nous allons créer un nouveau travail nommé «Backup LAMP». La chose importante ici est que nous spécifions les bons * Client * (lamp-fd) et * FileSet * (LAMP Files):

jobs.conf - Sauvegarde db1

Job {
 Name = "Backup LAMP"
 JobDefs = "DefaultJob"
 Client =
 Pool = RemoteFile
 FileSet=""
}

Sauvegarder et quitter.

Notre travail de sauvegarde est maintenant configuré. La dernière étape consiste à redémarrer Bacula Director.

Redémarrer Bacula Director

Sur le serveur * backups *, redémarrez Bacula Director pour appliquer toutes les modifications:

sudo service bacula-director restart

À ce stade, vous souhaiterez tester votre connexion client et votre travail de sauvegarde. Ces deux tâches sont décrites dans la https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14. -04-server-with-bacula # test-client-connection [Comment sauvegarder un serveur avec Bacula]. Ce tutoriel explique également comment restaurer des sauvegardes Bacula. Notez que pour restaurer la base de données MySQL, vous devez suivre les instructions https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on. ubuntu-14-04 # effectuer-sauvegarde-restauration [Effectuer la restauration de sauvegarde] dans le didacticiel Percona XtraBackup.

Vérifier le calendrier des sauvegardes

La planification des sauvegardes Bacula peut être ajustée en modifiant la configuration de Bacula Director (+ / etc / bacula / bacula-dir.conf +). Le travail de sauvegarde que nous avons créé utilise 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 lamp         Remote-0002

N’hésitez pas à ajouter ou à ajuster le calendrier de vos tâches de sauvegarde. Si vous souhaitez que vos sauvegardes soient un peu plus flexibles, il serait prudent de séparer les sauvegardes de la base de données de tout le reste. De cette façon, vous pouvez modifier la planification du travail de sauvegarde des fichiers de l’application pour qu’elle se produise au moment de l’exécution du script Percona XtraBackup (22 h 30) et sauvegarder la sauvegarde à chaud de la base de données (produite par XtraBackup) à la fin. en cours de préparation. Cela réduira les risques d’incohérence entre les sauvegardes de l’application et de la base de données.

Configurer des sauvegardes à distance (facultatif)

Si vous le souhaitez, vous pouvez créer un serveur distant qui stockera des copies de vos 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. Par exemple, si votre serveur LAMP et vos serveurs de sauvegarde se trouvent à New York, vous pouvez utiliser la région DigitalOcean’s San Francisco (SFO1) pour votre serveur * remotebackups *.

Nous expliquerons une méthode simple pour envoyer nos sauvegardes de notre serveur * backups * à notre serveur * remotebackups * à l’aide de clés SSH publiques, de rsync et de cron.

Sur le serveur * remotebackups *, create un utilisateur qui sera utilisé pour la connexion rsync.

Ensuite, sur le serveur * backups *, générez une paire de clés SSH sans mot de passe en tant que root. Installez la clé publique sur l’utilisateur * remotebackups * que vous venez de créer. Ceci est couvert dans notre tutoriel Comment configurer les clés SSH.

Sur le serveur * backups *, écrivez une commande rsync qui copie les données de sauvegarde Bacula (+ / bacula / backup +) sur le serveur * remotebackups *. L’utilisation de Rsync est décrite dans notre Comment utiliser Rsync Didacticiel. La commande ressemblera probablement à ceci:

rsync -az /bacula/backup @:/

Ajoutez la commande à un script, tel que + / usr / local / bin / rsync_backups.sh + et rendez-la exécutable.

Enfin, vous souhaiterez configurer un travail cron qui exécute le script + rsync_backups.sh + en tant que root, une fois les travaux de sauvegarde Bacula terminés. Ceci est couvert dans notre Comment planifier des tâches de routine avec Cron Didacticiel.

Après avoir configuré tout cela, vérifiez qu’il existe une copie de vos sauvegardes sur le serveur * remotebackups * le jour suivant.

Examiner la configuration requise pour le disque de sauvegarde

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.

Dans notre exemple, à moins que votre application PHP ait un volume de contenu et de média assez important, les sauvegardes consomment probablement moins d’espace disque. En effet, notre sélection de sauvegarde est très prudente et le travail de sauvegarde par défaut crée des sauvegardes * incrémentielles * lorsque cela est possible.

Conclusion

Vous devriez maintenant avoir des sauvegardes quotidiennes et, si vous les configurez, une copie distante de ces sauvegardes, de votre serveur LAMP. Assurez-vous de pouvoir restaurer les fichiers sauvegardés en exécutant rapidement le processus de restauration.