So sichern Sie einen LAMP-Server mit Bacula unter Ubuntu 14.04

Einführung

Nachdem Sie Ihren Anwendungsserver in Betrieb genommen haben, besteht ein wichtiger nächster Schritt darin, ein Sicherungssystem einzurichten. Mit einem Sicherungssystem können Sie regelmäßige Sicherungskopien Ihrer Daten erstellen und Daten aus diesen Sicherungen wiederherstellen. Da Daten aufgrund eines Benutzerfehlers oder eines möglichen Hardwarefehlers eines Computersystems verloren gehen können, sollten Sie Sicherungskopien als Sicherheitsnetz einrichten.

Dieses Tutorial zeigt Ihnen, wie Sie korrekte Backups einer PHP-Anwendung erstellen, indem Sie einen LAMP-Stack auf einem einzelnen Ubuntu 14.04-Server ausführen, indem Sie einen separaten Backup-Server verwenden, auf dem Bacula ausgeführt wird. Ein Vorteil eines Backup-Systems wie Bacula besteht darin, dass Sie die vollständige Kontrolle darüber haben, was auf der Ebene der einzelnen Dateien gesichert und wiederhergestellt werden soll und wann die Backups erstellt werden sollen. Die Granularität auf Dateiebene beim Erstellen von Backups ermöglicht es uns, die Backup-Auswahl auf die benötigten Dateien zu beschränken, was im Vergleich zum Sichern des gesamten Dateisystems Speicherplatz spart.

Wenn Ihnen dies übertrieben vorkommt, sollten Sie DigitalOcean Droplet Backups (Snapshot-Backups Ihres gesamten Droplets) in Betracht ziehen aktiviert, wenn Sie Ihr Droplet erstellen. Diese Sicherungen sind einfach einzurichten und können für Ihre Anforderungen ausreichend sein, wenn Sie nur wöchentliche Sicherungen benötigen. Wenn Sie sich für DigitalOcean Backups entscheiden, müssen Sie Hot-Backups Ihrer Datenbank einrichten. Befolgen Sie dazu den Abschnitt * Hot-Backups Ihrer Datenbank erstellen *. Dies ist erforderlich, um sicherzustellen, dass Ihre Datenbank-Backups konsistent (verwendbar) sind.

Voraussetzungen

In diesem Tutorial wird davon ausgegangen, dass Sie eine PHP-Anwendung wie WordPress ausführen, die auf einem LAMP-Stack (Linux, Apache, MySQL / MariaDB und PHP) auf einem einzelnen Ubuntu 14.04-Server mit aktiviertem privaten Netzwerk ausgeführt wird. Wir werden dies als * LAMP * -Server bezeichnen. In unserem Beispiel erstellen wir Backups eines WordPress-Servers, der mithilfe der folgenden Tutorials erstellt wurde:

Wenn Sie eine andere PHP-Anwendung ausführen oder Nginx anstelle von Apache verwenden, funktioniert dieses Lernprogramm weiterhin einwandfrei, vorausgesetzt, Sie nehmen die erforderlichen Anpassungen an Ihrer Sicherungsauswahl vor.

Natürlich benötigen Sie sudo-Zugriff auf einen Server, auf dem die Bacula-Serversoftware installiert wird, die wir als * Backups * -Server bezeichnen. Im Idealfall befindet es sich im selben Rechenzentrum wie Ihr LAMP-Server und verfügt über ein aktiviertes privates Netzwerk. Die erstellten Sicherungen werden auf diesem Server gespeichert, sodass genügend Speicherplatz zum Speichern mehrerer Kopien Ihrer Sicherungsauswahl erforderlich ist.

Sicherungsauswahl

Wie in der Einführung erwähnt, besteht unsere Sicherungsauswahl - die Dateien, die bei jeder Sicherungserstellung kopiert werden - nur aus den Dateien, die zum Wiederherstellen des vorherigen Status Ihrer Anwendung erforderlich sind. Kurz gesagt bedeutet dies, dass wir die folgenden Daten sichern:

  • * PHP-Anwendungsdateien: * Dies ist der DocumentRoot Ihres Webservers. Unter Ubuntu ist dies standardmäßig "+ / var / www / html"

  • * MySQL-Datenbank: * Während die MySQL-Datendateien normalerweise in + / var / lib / mysql + gespeichert sind, müssen wir eine Sicherungskopie der Datenbank an einem anderen Ort erstellen. Die Hot-Backups werden Teil unserer Backup-Auswahl sein

Der Einfachheit halber nehmen wir auch die Apache- und MySQL-Konfigurationsdateien in unsere Sicherungsauswahl auf. Wenn Sie andere wichtige Dateien haben, z. B. SSL-Schlüssel und Zertifikatsdateien, müssen Sie diese ebenfalls einschließen.

Die restlichen Dateien auf dem Server können ersetzt werden, indem Sie die Schritte zur Softwareinstallation der Ersteinrichtung ausführen. Im Falle eines Serverausfalls können wir einen Ersatz-LAMP-Server erstellen, indem wir die vorausgesetzten Lernprogramme befolgen, dann die Sicherungen wiederherstellen und die entsprechenden Dienste neu starten.

Wenn Sie sich nicht sicher sind, warum wir die oben genannten Dateien in die Sicherungsauswahl aufnehmen, lesen Sie die Recovery Planning aus der mehrteiligen Tutorial-Reihe * Building for Production: Web Applications *. Es wird beschrieben, wie ein Wiederherstellungsplan für eine Webanwendung am Beispiel eines Multiserver-Setups entwickelt werden kann.

Richten wir die Hot-Backups unserer Datenbank ein.

Erstellen Sie Sicherungskopien der Datenbank

Um sicherzustellen, dass wir konsistente (d. H. nutzbare) Sicherungen unserer aktiven Datenbank sind mit besonderer Sorgfalt durchzuführen. Eine einfache und effektive Möglichkeit zum Erstellen von Hot-Backups mit MySQL ist die Verwendung von Percona XtraBackup.

Installieren Sie Percona XtraBackup

Installieren und konfigurieren Sie Percona XtraBackup auf Ihrem * LAMP * -Server, indem Sie diesem Tutorial folgen: https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona -xtrabackup-on-ubuntu-14-04 [So erstellen Sie Hot-Backups von MySQL-Datenbanken mit Percona XtraBackup unter Ubuntu 14.04]. Beenden Sie den Vorgang, wenn Sie den Abschnitt * Durchführen einer vollständigen Sicherung im laufenden Betrieb * erreichen.

XtraBackup-Skript erstellen

Percona XtraBackup ist bereit, Hot-Backups Ihrer MySQL-Datenbank zu erstellen, die letztendlich von Bacula (oder DigitalOcean Backups) gesichert werden. Die Hot-Backups müssen jedoch irgendwie geplant werden. Wir werden die einfachste Lösung einrichten: ein Bash-Skript und einen Cron-Job.

Erstellen Sie ein Bash-Skript mit dem Namen "+ run_extra_backup.sh" in "+ / usr / local / bin":

sudo vi /usr/local/bin/run_xtrabackup.sh

Fügen Sie das folgende Skript hinzu. Stellen Sie sicher, dass Sie den Benutzer und das Kennwort durch das ersetzen, was Sie bei der Installation von XtraBackup eingerichtet haben:

/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

Speichern und schließen. Durch Ausführen dieses Skripts (mit Superuser-Berechtigungen) wird die vorhandene XtraBackup-Sicherung unter "+ / data / backups / full +" gelöscht und eine neue vollständige Sicherung erstellt. Kurz gesagt, dieses Skript verwaltet eine einzelne Kopie des Hot-Backups der Datenbank. Weitere Informationen zum Erstellen von Sicherungen mit XtraBackup finden Sie unter 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 Abschnitt [Perform Full Hot Backup] des XtraBackup-Tutorials.

Machen Sie das Skript ausführbar:

sudo chmod +x /usr/local/bin/run_xtrabackup.sh

Um unsere Datenbank ordnungsgemäß zu sichern, müssen wir das XtraBackup-Skript ausführen (und abschließen), bevor Bacula versucht, die Datenbank zu sichern. Eine gute Lösung besteht darin, Ihren Bacula-Backup-Job so zu konfigurieren, dass das Skript als „Pre-Backup-Skript“ ausgeführt wird. Wir verwenden jedoch die Option https://www.digitalocean.com/community/tutorials/how-to-schedule-. Routine-Aufgaben-mit-Cron-und-Anacron-auf-einem-VPS [Cron-Job], um es einfach zu halten.

Erstellen Sie eine cron-Konfigurationsdatei (Dateien in + / etc / cron.d + werden zur crontab von root hinzugefügt):

sudo vi /etc/cron.d/xtrabackup

Fügen Sie den folgenden Cron-Job hinzu:

/etc/cron.d/xtrabackup

   * * *   root    /usr/local/bin/run_xtrabackup.sh

Dadurch wird das Skript so geplant, dass es jeden Tag um 22:30 Uhr (22. Stunde, 30. Minute) als root ausgeführt wird. Wir haben diese Zeit gewählt, da Baculas Standard-Backup-Job täglich um 23:05 Uhr ausgeführt werden soll. Wir werden dies später besprechen. Auf diese Weise kann das XtraBackup-Skript innerhalb von 35 Minuten ausgeführt werden.

Nachdem die Datenbank-Hot-Backups eingerichtet sind, installieren wir Bacula auf unserem Backup-Server.

Installieren Sie Bacula auf dem Backup-Server

Richten Sie auf Ihrem * Backup * -Server den Bacula-Server ein, indem Sie diesem Tutorial folgen: How To Installieren Sie Bacula Server unter Ubuntu 14.04.

Folgen Sie dann dem Abschnitt * Bacula Director-Konfiguration (Server) organisieren * dieses Tutorials: https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with -bacula #organize-bacula-director-configuration- (server) [So sichern Sie einen Ubuntu 14.04-Server mit Bacula]. Sie benötigen den Director-Namen zum Einrichten der Bacula-Clients (auf den Servern, die Sie sichern möchten). Beenden Sie den Vorgang, wenn Sie den Abschnitt * Bacula Client installieren und konfigurieren * erreichen.

Beachten Sie, dass wir den RemoteFile-Pool für alle Sicherungsjobs verwenden, die wir einrichten werden. Vor diesem Hintergrund möchten Sie möglicherweise einige Einstellungen ändern, bevor Sie fortfahren.

Installieren Sie den Bacula Client auf dem LAMP Server

Installieren Sie den Bacula-Client auf Ihrem * LAMP * -Server, indem Sie dem Abschnitt * Bacula-Client installieren und konfigurieren * in diesem Lernprogramm folgen: https://www.digitalocean.com/community/tutorials/how-to-back-up-an- ubuntu-14-04-server-with-bacula # install-and-configure-bacula-client [So sichern Sie einen Ubuntu 14.04-Server mit Bacula]. Stoppen Sie, wenn Sie den Abschnitt * Add FileSets (Server) * erreichen.

Beachten Sie, dass Sie den * FileDaemon-Namen * (normalerweise den Hostnamen, an den “-fd” angehängt ist) und das * Director-Passwort * (das Passwort, mit dem der Bacula-Server eine Verbindung zum Bacula-Client herstellt) vom `+ bacula-fd benötigen .conf + `Datei auf dem LAMP Server.

Sicherungsclient zum Sicherungsserver hinzufügen

Fügen Sie auf Ihrem * Backup * -Server, dem Bacula-Server, eine * Client-Ressource * für den LAMP-Server zur Datei + / etc / bacula / conf.d / clients.conf + hinzu.

Öffnen Sie die Datei + clients.conf +:

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

Die Client-Ressourcendefinition für den LAMP-Server sollte ungefähr so ​​aussehen wie der folgende Codeblock. Beachten Sie, dass der Wert von * Name * mit dem Namen der * FileDaemon * -Ressource und das * Passwort * mit dem Passwort der * Director * -Ressource auf dem LAMP-Server übereinstimmen muss. Diese Werte finden Sie in `+ / etc / bacula / bacula-fd.conf + `auf dem LAMP-Server:

clients.conf - Beispiel für eine Clientressourcendefinition

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
}

Speichern und schließen. Dadurch wird der Bacula Director auf dem * backups * -Server so konfiguriert, dass auf jedem Server eine Verbindung zum Bacula-Client hergestellt werden kann.

Weitere Informationen zu diesem Abschnitt finden Sie im Abschnitt * Bacula Client installieren und konfigurieren * unter https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server -with-bacula # install-and-configure-bacula-client [So sichern Sie einen Ubuntu-Server mit Bacula-Tutorial].

Jetzt konfigurieren wir die Bacula-Backup-Dateisätze.

Konfigurieren Sie Bacula FileSets

Bacula erstellt Sicherungen von Dateien, die in den Dateisätzen angegeben sind, die den Sicherungsjobs zugeordnet sind, die ausgeführt werden. In diesem Abschnitt wird das Erstellen von FileSets behandelt, die die Dateien enthalten, die wir zuvor als Teil unserer * Sicherungsauswahl * festgelegt haben. Weitere Informationen zum Hinzufügen von FileSets zu Bacula finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula#add- filesets- (server) Abschnitt [Add FileSets (Server)] des Bacula-Tutorials.

Öffnen Sie auf Ihrem * backups * -Server die Datei + filesets.conf +:

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

Die erforderlichen Sicherungen für unseren LAMP-Server laut unserer Sicherungsauswahl umfassen:

  • * PHP-Anwendungsdateien: * + / var / www / html

  • * MySQL-Datenbank: * + / data / backups / full + - Täglich um 22.30 Uhr erstellt unser XtraBackup-Skript ein vollständiges Hot-Backup

Der Einfachheit halber werden wir auch die folgenden Dateien hinzufügen:

  • * MySQL-Konfiguration: * + / etc / mysql

  • * Apache-Konfiguration: * + / etc / apache2 +

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

  • * XtraBackup-Cron-Datei: * + / etc / cron.d / xtrabackup +

Unter Berücksichtigung unserer Sicherungsauswahl werden wir unserer Bacula-Konfiguration das folgende FileSet hinzufügen:

filesets.conf - MySQL-Datenbank

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






 }
 Exclude {

 }
}

Speichern und schließen. Beachten Sie, dass sich alle markierten * File * -Anweisungen im * Include * -Block befinden. Dies sind alle Dateien, die gesichert werden sollen. Wenn Sie Dateien aus dem Sicherungsjob ausschließen möchten, die sich in den enthaltenen Verzeichnissen befinden, fügen Sie sie dem Block * Exclude * hinzu.

Jetzt ist unser FileSet konfiguriert. Fahren wir mit dem Erstellen des Bacula-Sicherungsjobs fort, der dieses FileSet verwendet.

Bacula Backup Job erstellen

Wir erstellen einen Bacula-Sicherungsjob, der ausgeführt wird, und erstellen Sicherungen unseres LAMP-Servers.

Erstellen Sie eine + jobs.conf + Datei in + / etc / bacula / conf.d +:

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

LAMP Server-Sicherungsjob

Für unseren LAMP-Server-Backup-Job erstellen wir einen neuen Job mit dem Namen "Backup LAMP". Wichtig hierbei ist, dass wir den richtigen * Client * (lamp-fd) und * FileSet * (LAMP-Dateien) angeben:

jobs.conf - Backup von db1

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

Speichern und schließen.

Jetzt ist unser Sicherungsjob konfiguriert. Der letzte Schritt ist der Neustart des Bacula Director.

Starten Sie Bacula Director neu

Starten Sie auf dem * backups * -Server den Bacula Director neu, damit alle unsere Änderungen wirksam werden:

sudo service bacula-director restart

Zu diesem Zeitpunkt möchten Sie Ihre Client-Verbindung und Ihren Sicherungsjob testen. Beide Themen werden in https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14 behandelt -04-server-with-bacula # test-client-connection [So sichern Sie einen Server mit Bacula-Tutorial]. In diesem Tutorial erfahren Sie auch, wie Sie Bacula-Backups wiederherstellen. Beachten Sie, dass Sie zum Wiederherstellen der MySQL-Datenbank die folgenden Schritte ausführen müssen: https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on- ubuntu-14-04 # Sicherungswiederherstellung durchführen Schritt [Sicherungswiederherstellung durchführen] im Percona XtraBackup-Lernprogramm.

Überprüfen Sie den Sicherungszeitplan

Der Bacula-Backup-Zeitplan kann durch Ändern der Bacula Director-Konfiguration (+ / etc / bacula / bacula-dir.conf +) angepasst werden. Der von uns erstellte Sicherungsjob verwendet das JobDef "DefaultJob", das den Zeitplan "WeeklyCycle" verwendet, der wie folgt definiert ist:

  • Vollständige Sicherung am ersten Sonntag eines Monats um 23:05 Uhr

  • Differenzielle Backups an allen anderen Sonntagen um 23:05 Uhr

  • Inkrementelle Backups an anderen Tagen, Montag bis Samstag, um 23:05 Uhr

Sie können dies überprüfen, indem Sie mit der Bacula-Konsole den Status des Directors überprüfen. Es sollte alle geplanten Jobs ausgeben:

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

Sie können den Zeitplan für Ihre Sicherungsjobs jederzeit ändern oder hinzufügen. Wenn Sie möchten, dass Ihre Sicherungen etwas flexibler sind, ist es ratsam, die Datenbanksicherungen von allen anderen zu trennen. Auf diese Weise können Sie den Zeitplan des Sicherungsauftrags für Anwendungsdateien so ändern, dass er zur gleichen Zeit ausgeführt wird, zu der das Percona XtraBackup-Skript ausgeführt wird (22.30 Uhr), und das von XtraBackup erstellte Hot-Backup der Datenbank sichern, wenn es abgeschlossen ist vorbereitet sein. Dies verringert die Wahrscheinlichkeit, dass Anwendungs- und Datenbanksicherungen nicht miteinander konsistent sind.

Einrichten von Remote-Sicherungen (optional)

Wenn Sie möchten, können Sie einen Remote-Server erstellen, auf dem Kopien Ihrer Bacula-Backups gespeichert werden. Dieser Remoteserver sollte sich in einer geografisch getrennten Region befinden, damit Sie eine Kopie Ihrer wichtigen Sicherungen haben, auch wenn sich in Ihrem Produktionsdatenzentrum ein Notfall ereignet. Wenn sich Ihre LAMP- und Backup-Server beispielsweise in New York befinden, können Sie die Region San Francisco (SFO1) von DigitalOcean für Ihren * Remotebackups * -Server verwenden.

Wir erklären eine einfache Methode zum Senden unserer Backups von unserem * backups * -Server an unseren * remotebackups * -Server mit öffentlichen SSH-Schlüsseln, rsync und cron.

Auf dem * remotebackups * -Server create a user that wird für den rsync Login verwendet.

Generieren Sie als Nächstes auf dem * backups * -Server ein kennwortloses SSH-Schlüsselpaar als root. Installieren Sie den öffentlichen Schlüssel auf dem soeben erstellten Benutzer * remotebackups *. Dies wird in unserem Einrichten von SSH-Schlüsseln Tutorial behandelt.

Schreiben Sie auf dem * backups * -Server einen rsync-Befehl, der die Bacula-Sicherungsdaten (+ / bacula / backup +) auf den * remotebackups * -Server kopiert. Informationen zur Verwendung von Rsync finden Sie unter How To Use Rsync Lernprogramm. Der Befehl sieht wahrscheinlich so aus:

rsync -az /bacula/backup @:/

Fügen Sie den Befehl einem Skript hinzu, z. B. "+ / usr / local / bin / rsync_backups.sh +", und machen Sie es ausführbar.

Zuletzt möchten Sie einen Cron-Job einrichten, der das Skript "+ rsync_backups.sh +" als Root ausführt, nachdem die Bacula-Sicherungsjobs normalerweise abgeschlossen sind. Dies wird in unserer So planen Sie Routineaufgaben mit Cron Lernprogramm.

Vergewissern Sie sich am nächsten Tag, dass sich auf dem * remotebackups * -Server eine Kopie Ihrer Sicherungen befindet, nachdem Sie dies alles eingerichtet haben.

Überprüfen Sie die Anforderungen an die Sicherungsdiskette

Wir haben nicht über die Festplattenanforderungen für Ihre Sicherungen gesprochen. Sie sollten auf jeden Fall überprüfen, wie viel Speicherplatz Ihre Backups belegen, und Ihren Setup- und Backup-Zeitplan entsprechend Ihren Anforderungen und Ressourcen überarbeiten.

In unserem Beispiel belegen die Sicherungen wahrscheinlich relativ wenig Speicherplatz, es sei denn, Ihre PHP-Anwendung verfügt über ein ziemlich großes Volumen an Inhalten und Medien. Dies liegt daran, dass unsere Backup-Auswahl sehr konservativ ist und der Standard-Backup-Job nach Möglichkeit * inkrementelle * Backups erstellt.

Fazit

Sie sollten nun tägliche Backups und (falls Sie es eingerichtet haben) eine Remote-Kopie dieser Backups von Ihrem LAMP-Server haben. Stellen Sie sicher, dass Sie die gesicherten Dateien wiederherstellen können, indem Sie den Wiederherstellungsprozess schnell ausführen.