Einführung
Nachdem Sie einen Wiederherstellungsplan für die verschiedenen Komponenten Ihrer Anwendung erarbeitet haben, sollten Sie das benötigte Backup-System einrichten. Dieser Tutorial konzentriert sich auf die Verwendung von Bacula als Backupsolution. Die Vorteile einer vollen Laufwerksbackupsysteme wie Bacula sind, dass Sie individuell über den Level der Dateien zu backen und wieder herstellen sowie Backups und Wiederherstellungen nach einem Zeitplan zu schaffen, der für Sie am besten ist.
Lösungen wie DigitalOcean Droplet Backups (Snapshots des gesamten Droplets) sind leicht zu setzen und möglicherweise genug für Ihre Bedürfnisse, falls Sie nur wöchentliche Backups benötigen. Falls Sie DigitialOcean Backups auswählen, stellen Sie sicher, dass Sie die Datenbank mit dem Hot Backups erstellen-Abschnitt aktivieren.
In diesem Abschnitt des Leitfadens werden wir Bacula einrichten, um tägliche Backups der erforderlichen Backups der Server zu pflegen, die die Anwendungsstruktur Ihres Setups (db1, app1, app2 und lb1) ausmachen und die wir zuvor in unserem Wiederherstellungsplan definiert haben. Es handelt sich hierbei um ein Leitfaden, der Ihnen zeigt, wie Sie mit Bacula Backups eines LAMP-Stacks erstellen können. Wir werden auch Percona XtraBackup verwenden, um Ihre MySQL-Datenbank hot zu sichern. Schließlich werden wir rsync verwenden, um eine Kopie Ihrer Backups auf einem Server in einem entfernten Rechenzentrum zu erstellen. Dies fügt Ihrem Setup zwei Server hinzu: backups und remotebackups (befindet sich in einem separaten Rechenzentrum).
Lassen Sie uns beginnen.
Installieren Sie Bacula auf dem Backups-Server
Richten Sie Bacula auf Ihrem backups-Server ein, indem Sie diesen Leitfaden befolgen: Wie man Bacula Server auf Ubuntu 14.04 installiert.
Um die Konfiguration des Bacula Directors (Servers) zu organisieren, folgen Sie bitte der Organize Bacula Director Configuration (Server)-Abschnitt dieser Anleitung: How To Back Up an Ubuntu 14.04 Server with Bacula. Sie benötigen dazu den Director Name, wenn Sie das Backup der Servern (die du backen möchtest) einrichten. Wenn Sie den Abschnitt Install and Configure Bacula Client erreichen, stoppen Sie dort. Hinweis: Wir werden für alle Backup Jobs die RemoteFile-Pool verwenden. Mit dem sagten, könnten Sie vor dem Fortfahren einige Einstellungen ändern.
Install Bacula Client on Each Server
Installieren Sie auf jeder gewünschten Server (db1, app1, app2 und lb1) den Bacula-Client, indem Sie die Install and Configure Bacula Client-Abschnitt dieser Anleitung: How To Back Up an Ubuntu 14.04 Server with Bacula folgen. Stoppen Sie bei der Add FileSets (Server)-Abschnitt.
Bitte beachten Sie, dass Sie den DateiDämonennamen (normalerweise die Hostnamensuffix „-fd“) und das Leiterpasswort (das Passwort, das der Bacula-Server zum Herstellen einer Verbindung mit jeder Client-Server verwenden wird) aus dem bacula-fd.conf
-Datei auf jeder Server einfügen müssen, auf dem Sie den Bacula-Client installiert haben.
Bacula-Klienten zu Backup-Server hinzufügen
Auf dem Backups-Server, dem Bacula-Server, fügen Sie für jeden Server hinzu, auf dem Sie den Bacula-Client installiert haben, einen Client-Ressourcen zur /etc/bacula/conf.d/clients.conf
-Datei hinzu.
Öffnen Sie die clients.conf
-Datei:
Hier ist ein Beispiel für die Client-Ressourcedefinition für den Datenbankserver, db1. Die Werte von Name sollten mit dem Namen des FileDaemon-Ressourcen auf dem Client-Server übereinstimmen und die Passwort sollte mit dem Passwort der Director-Ressourcen auf dem Client-Server übereinstimmen; diese Werte finden Sie in /etc/bacula/bacula-fd.conf
auf jeder Bacula-Client-Server:
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
}
Erstellen Sie eine ähnliche Client-Ressource für jede der restlichen Bacula-Client-Servern. Im Beispiel sollen vier Client-Ressourcen erstellt werden: db1-fd, app1-fd, app2-fd, und lb1-fd. Dies konfiguriert den Bacula-Director, auf dem Backups-Server, damit er sich mit jeder Bacula-Client auf jeder Server verbinden kann…
Speichern und Beenden.
Weitere Details zu diesem Abschnitt finden Sie unter Installieren und Konfigurieren des Bacula-Clients im How To Back Up an Ubuntu Server with Bacula Tutorial.
Erstellen Sie heiße Sicherungen Ihrer Datenbank
Um sicherzustellen, dass wir konsistente (d. h. nutzbare) Sicherungen unserer aktiven Datenbank erstellen, muss besonders sorgfältig vorgegangen werden. Eine einfache und effektive Methode, heiße Sicherungen mit MySQL zu erstellen, ist die Verwendung von Percona XtraBackup.
Installieren Sie Percona XtraBackup
Auf Ihrem Datenbankserver, db1, installieren und konfigurieren Sie Percona XtraBackup, indem Sie dieses Tutorial befolgen: How To Create Hot Backups of MySQL Databases with Percona XtraBackup on Ubuntu 14.04. Stoppen Sie, wenn Sie den Abschnitt Perform Full Hot Backup erreichen.
Erstellen Sie ein Skript für XtraBackup
Percona XtraBackup ist bereit, die Datenbanken Ihres MySQL-Servers unter Hot-Bedingungen zu sichern, was schließlich von Bacula (oder DigitalOcean Backups) übernommen wird. Die Hot-Sicherungen müssen jedoch irgendwie automatisiert werden. Wir stellen eine der einfachsten Lösungen ein: Ein Bash-Skript und einen Cron-Job.
Erstellen Sie ein Bash-Skript namens run_extra_backup.sh
in /usr/local/bin
:
Fügen Sie das folgende Skript hinzu. Sicherheitshalber sollten Sie die Benutzername und Password mit denen ersetzen, die Sie bei der Installation von XtraBackup festlegten:
#!/bin/bash
# vor xtrabackup
chown -R mysql: /var/lib/mysql
find /var/lib/mysql -type d -exec chmod 770 "{}" \;
# löschen bestehendes komplettes 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
Speichern und Exit. Durch Ausführen dieses Skripts (mit Superuser-Berechtigungen) werden Sie das aktuelle kompletteste Backup von /data/backups/full
löschen und ein neues erstellen. Mehr Informationen über die Erstellung von Sicherungen mit XtraBackup finden Sie im Abschnitt Ausführen eines vollen Hot-Backups des XtraBackup-Tutorials.
Machen Sie das Skript ausführbar:
Um eine sichere Datenbankbackup zu erstellen, müssen wir vor dem Versuch von Bacula die Datenbankserver zu backen das Skript XtraBackup ausführen. Eine gute Lösung ist es, dieses Skript als „Pre-Backup-Skript“ für Ihr Bacula-Backup-Job zu konfigurieren, aber wir wollen uns hier auf einen einfachen Weg mit einem cron-Job beschränken.
Erstellen Sie eine Cron-Konfigurationsdatei (Dateien im Verzeichnis /etc/cron.d
werden automatisch zum Crontab des Benutzers root hinzugefügt):
Fügen Sie folgenden Cron-Job hinzu:
30 22 * * * root /usr/local/bin/run_xtrabackup.sh
Dies schreibt das Skript täglich um 22:30 Uhr (22. Stunde, 30. Minute) als root aus. Wir haben diese Zeit gewählt, weil Bacula derzeit täglich um 23:05 Uhr Backup Jobs ausführen lässt—wir sprechen darüber später. Dieser Zeitpunkt erlaubt 35 Minuten, damit das Skript XtraBackup abgeschlossen ist.
Nachdem die Datenbank Hot-Backups eingerichtet sind, schauen wir uns die Bacula-Backup-Dateisets an.
Bacula Dateisets konfigurieren
Bacula erstellt Sicherungen von Dateien, die in den FileSets angegeben sind, die mit den Sicherungsaufträgen verbunden sind, die ausgeführt werden sollen. Dieser Abschnitt behandelt die Erstellung von FileSets, die die erforderlichen Sicherungen enthalten, die wir in unseren Wiederherstellungsplänen identifiziert haben. Weitere Details zur Hinzufügung von FileSets zu Bacula finden Sie im Abschnitt Dateisätze hinzufügen (Server) des Bacula-Tutorials.
Auf Ihrem Sicherungsserver öffnen Sie die Datei filesets.conf
:
Datenbank-Server-FileSet
Die erforderlichen Sicherungen für unseren Datenbank-Server, entsprechend unserem Wiederherstellungsplan für den Datenbank-Server, umfassen:
- MySQL-Datenbank: Eine Sicherheitskopie wird durch unser XtraBackup-Skript in
/data/backups/full
täglich um 22:30 Uhr erstellt - MySQL-Konfiguration: befindet sich in
/etc/mysql
Wir werden auch das XtraBackup-Skript hinzufügen: /usr/local/bin/run_xtrabackup.sh
und die zugehörige cron-Datei.
Angesichts unserer erforderlichen Sicherungen fügen wir diesen „MySQL-Datenbank“-FileSet zu unserer Bacula-Konfiguration hinzu:
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
}
}
Nun gehen wir zur Erstellung des Dateisatzes für den Anwendungsserver über.
Anwendungsserver-Dateisatz
Die erforderlichen Sicherungen unserer Anwendungsserver, gemäß unserem Anwendungsserver-Wiederherstellungsplan, umfassen:
- Anwendungsdateien: im Beispiel unter
/var/www/html
Mit den erforderlichen Sicherungen im Hinblick, schließen wir diesen „Apache-Dokumenteigenschaft“ Dateisatz zu unserer Bacula-Konfiguration hinzu:
FileSet {
Name = "Apache DocumentRoot"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /var/www/html
}
Exclude {
File = /var/www/html/exclude
}
}
Sie können auch die Konfigurationsdatei des Apache-Ports einbeziehen, aber sie ist leicht ersetztbar.
Nun gehen wir zur nächsten Schritte mit dem Load Balancer-Server Dateisatz.
Die erforderlichen Sicherungen für unsere Load Balancer-Server, gemäß unserem Load Balancer-Server-Wiederherstellungsplan, umfassen:
- SSL-Zertifikat (PEM) und zugehörige Dateien: im Beispiel unter
/root/certs
in unserem Fall - HAProxy-Konfigurationsdatei: unter
/etc/haproxy
Mit unseren erforderlichen Sicherungen im Hinblick, fügen wir diesen „Apache-Dokumenteigenschaft“ Dateisatz zu unserer Bacula-Konfiguration hinzu:
FileSet {
Name = "SSL Certs and HAProxy Config"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /root/certs
File = /etc/haproxy
}
Exclude {
File = /root/exclude
}
}
Speichern und Exit.
Jetzt sind unsere Filesets konfiguriert. Schauen wir uns nun an, wie wir die Bacula-Backup-Jobs erstellen, die diese Filesets verwenden werden sollen.
Bacula Backup Jobs erstellen
Wir erstellen Bacula-Backup-Jobs, die auf unseren Servern Backups erstellen werden.
Erstellen Sie ein jobs.conf
-Datei im Verzeichnis /etc/bacula/conf.d
:
Datenbank-Server-Backup-Job
Für den Datenbank-Server-Backup-Job erstellen wir einen neuen Job namens „Backup_db1“. Die wichtige Punkte hier sind, dass wir die richtigen Klienten (db1-fd) und Filesets (MySQL-Datenbank) angeben:
Job {
Name = "Backup db1"
JobDefs = "DefaultJob"
Client = db1-fd
Pool = RemoteFile
FileSet="MySQL Database"
}
Nun stellen wir die Backup-Jobs für die Applikationsserver ein.
Anwendungs-Server-Backup-Jobs
Für unsere Anwendungsserver erstellen wir zwei Backup-Jobs namens „Backup_app1“ und „Backup_app2“. Die wichtige Punkte hier sind, dass wir die richtigen Clients (app1-fd und app2-fd) und Filesets (Apache-Dokumentumordner) angeben.
App1-Job:
Job {
Name = "Backup app1"
JobDefs = "DefaultJob"
Client = app1-fd
Pool = RemoteFile
FileSet="Apache DocumentRoot"
}
App2-Aufgabe:
Job {
Name = "Backup app2"
JobDefs = "DefaultJob"
Client = app2-fd
Pool = RemoteFile
FileSet="Apache DocumentRoot"
}
Jetzt werden wir die Aufgabe für den Lastenausgleichsserver einrichten.
Lastenausgleichsserver-Backupauftrag
Für unser Lastenausgleichsserver-Backupauftrag erstellen wir einen neuen Auftrag mit dem Namen „Backup lb1“. Wichtig hier ist, dass wir den richtigen Client (lb1-fd) und das richtige Dateiset (SSL-Zertifikate und HAProxy-Konfiguration) angeben:
Job {
Name = "Backup lb1"
JobDefs = "DefaultJob"
Client = lb1-fd
Pool = RemoteFile
FileSet="SSL Certs and HAProxy Config"
}
Speichern und beenden.
Jetzt sind unsere Backup-Aufgaben eingerichtet. Der letzte Schritt besteht darin, den Bacula-Director neu zu starten.
Neustart des Bacula-Directors
Auf dem Backup-Server starten Sie den Bacula-Director neu, um alle unsere Änderungen zu übernehmen:
Bitte testen Sie nun Ihre Client-Verbindungen und die Sicherungsjobs, die im Bacula-Tutorial zur Sicherung eines Servers behandelt werden. Dieses Tutorial enthält auch die Schritte für die Wiederherstellung von Bacula-Sicherungen. Beachten Sie dabei, dass die Wiederherstellung der MySQL-Datenbank den Schritt Wiederherstellen von Sicherungen aus dem Percona XtraBackup-Tutorial erfordern wird.
Bewerten Sie die Sicherungsplanung
Die Sicherungsplanung bei Bacula kann durch die Modifikation der Director-Konfiguration (/etc/bacula/bacula-dir.conf
) angepasst werden. Alle von uns erstellten Sicherungsjobs verwenden das „DefaultJob“, das die „WeeklyCycle“-Zeitschema benutzt, das definiert ist als:
- Vollbackup am ersten Sonntag eines Monats um 23:05 Uhr
- Differenzialbackups an allen anderen Sonntagen um 23:05 Uhr
- Inkremental-Backups an anderen Tagen, Montag bis Samstag, um 23:05 Uhr
Sie können dies über die Konsole des Directors verifizieren und sollten dort alle Ihre geplanten Jobs anzeigen sehen:
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
Freuen Sie sich auf die Möglichkeit, die Planung jeder Ihrer Sicherheitsabgaben frei zu gestalten. Es würde sinnvoll sein, den Zeitplan der Applikationsservern zu verändern, damit er mit dem Zeitplan des Percona XtraBackup-Skripts gleichzeitig ausführt wird (um 22:30 Uhr). Dadurch werden die Anwendungs- und Datenbankbackups nicht unterschiedlich von der jeweils anderen sein.
Einstellungen für Remote-Backups
Nun sind wir bereit, einen Remote-Server einzustellen, der Kopien unserer Bacula-Backups aufbewahren sollte. Dieser Remote-Server sollte in einer geografisch getrennten Region sein, damit Sie auch bei einem Katastrophalen Ereignis im Produktionsdatenzentrum eine Kopie Ihrer wichtigen Backups haben. Im Beispiel setzen wir uns für einen DigitalOceans Server in der San Francisco (SFO1) Region für unseren remotebackups-Server fest.
Wir erklären eine einfache Methode, um unsere Backups vom backups-Server an den remotebackups-Server zu senden, indem wir öffentliche SSH-Schlüssel, rsync und cron nutzen.
Auf dem remotebackups-Server erstellen Sie einen Benutzernamen, der für das rsync-Login genutzt werden soll.
Nachdem Sie auf dem Backups-Server als Root ein Password-Less SSH-Key-Pair generiert haben, installieren Sie die öffentliche Schlüssel auf den Benutzer Remotebackups, der Sie gerade erstellt haben. Dies ist im unseren Tutorial zum Setzen von SSH-Schlüsseln beschrieben.
Auf dem Backups-Server schreiben Sie einen Befehl für Rsync, der das Backup-Datenverzeichnis (z.B. /bacula/backup) auf irgendwo auf dem Remotebackups-Server kopiert. Die Verwendung von Rsync ist in unserem Tutorial über Rsync behandelt. Der Befehl sieht wahrscheinlich etwas aus wie dieser:
Der Befehl schreiben Sie in ein Skript, z.B. /usr/local/bin/rsync_backups.sh und machen Sie es exekutierbar.
Schließlich sollten Sie einen Cron-Job erstellen, der das rsync_backups.sh
Skript als Root ausführt, nachdem die Bacula-Backup-Jobs normalerweise abgeschlossen sind. Dies ist in unserem Tutorial über die Planung von Routine-Aufgaben mit Cron beschrieben.
Nachdem Sie alle diese Schritte durchgeführt haben, verifizieren Sie am nächsten Tag, dass Ihre Backups auf dem Remotebackups-Server vorhanden sind.
Weitere Aspekte
Wir haben bisher noch nicht über die Speicheranforderungen für Ihre Sicherungssysteme gesprochen. Sie sollten definitiv überprüfen, wie viel Speicherplatz Ihre Sicherungsdateien benötigen und Ihren Setup und Backup-Plan nach den eigenen Bedürfnissen und Ressourcen anpassen.
Außerdem sollten Sie wahrscheinlich eine Sicherungskonfiguration für weitere Server erstellen, die zu Ihrem Setup hinzugefügt werden. So sollten Sie Bacula so konfigurieren, dass es auch die Daten der Überwachungs- und Zentrallogingserver sowie jeder anderen Server sichern, die Sie hinzufügen.
Zusammenfassung
Sie sollten jetzt täglich Sicherungen haben und eine Remote-Kopie dieser Sicherungen. Stellen Sie sicher, dass Sie die Dateien wiederherstellen können und fügen Sie die Schritte zur Wiederherstellung Ihrer Daten in Ihre Recovery-Plans ein.
Bitte gehen Sie in das nächste Tutorial, um mit dem Aufbau der Überwachung für Ihr Produktionsserver-Setup beginnen: Building for Production: Web Applications — Monitoring.
Source:
https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-backups