Einführung
Nachdem Sie einen Wiederherstellungsplan für die verschiedenen Komponenten Ihrer Anwendung erstellt haben, sollten Sie das Backup-System einrichten, das für die Unterstützung erforderlich ist. Dieses Tutorial konzentriert sich auf die Verwendung von Bacula als Backup-Lösung. Der Vorteil eines umfassenden Backup-Systems wie Bacula besteht darin, dass Sie die vollständige Kontrolle darüber haben, was Sie auf der Ebene der einzelnen Dateien sichern und wiederherstellen. Außerdem können Sie Backups und Wiederherstellungen so planen, wie es für Sie am besten ist.
Lösungen wieDigitalOcean Droplet Backups (Snapshot-Backups Ihres gesamten Droplets) sind einfach einzurichten und können für Ihre Anforderungen ausreichen, wenn Sie nur wöchentliche Backups benötigen. Wenn Sie sich für DigitalOcean-Sicherungen entscheiden, müssen Sie Hot-Backups Ihrer Datenbank einrichten, indem Sie dem AbschnittCreate Hot Backups of Your Databasefolgen.
In diesem Teil des Tutorials richten wir eine Bacula ein, um tägliche Sicherungen derrequired backups der Server zu verwalten, aus denen Ihr Anwendungssetup (db1, app1, app2 und lb1) besteht, das zuvor in unserem Wiederherstellungsplan definiert wurde. Im Wesentlichen ist dies ein Tutorial, das Ihnen zeigt, wie Sie mit Bacula Backups eines LAMP-Stacks erstellen. Wir werden auch Percona XtraBackup verwenden, um Hot-Backups Ihrer MySQL-Datenbank zu erstellen. Zuletzt erstellen wir mit rsync eine Kopie Ihrer Sicherungen auf einem Server in einem Remote-Rechenzentrum. Dadurch werden Ihrem Setup zwei Server hinzugefügt:backups undremotebackups (in einem separaten Rechenzentrum).
Lass uns anfangen.
Installieren Sie Bacula auf dem Backup-Server
Richten Sie Bacula auf Ihrembackups-Server ein, indem Sie diesem Tutorial folgen:How To Install Bacula Server on Ubuntu 14.04.
Folgen Sie dann dem AbschnittOrganize Bacula Director Configuration (Server) in diesem Lernprogramm:How To Back Up an Ubuntu 14.04 Server with Bacula. Sie benötigen den Director-Namen zum Einrichten der Bacula-Clients (auf den Servern, die Sie sichern möchten). Halten Sie an, wenn Sie den AbschnittInstall and Configure Bacula Client 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 Bacula Client auf jedem Server
Installieren Sie den Bacula-Client auf jedem Server, den Sie sichern möchten (db1, app1, app2 und lb1), indem Sie dem AbschnittInstall and Configure Bacula Client dieses Lernprogramms folgen:How To Back Up an Ubuntu 14.04 Server with Bacula. Halten Sie an, wenn Sie den AbschnittAdd FileSets (Server) erreichen.
Beachten Sie, dass Sie dieFileDaemon Name (normalerweise der durch "-fd" angehängte Hostname) und dieDirector Password (das Kennwort, mit dem der Bacula-Server eine Verbindung zu jedem Client herstellt) vonbacula-fd.conf
benötigen. s Datei auf jedem Server.
Fügen Sie Bacula-Clients zum Sicherungsserver hinzu
Fügen Sie aufbackups, dem Bacula-Server, der/etc/bacula/conf.d/clients.conf
-Datei für jeden Server, auf dem Sie den Bacula-Client installiert haben, einClient resource hinzu.
Öffnen Sie die Dateiclients.conf
:
sudo vi /etc/bacula/conf.d/clients.conf
Hier ist ein Beispiel für die Client-Ressourcendefinition für den Datenbankserverdb1. Beachten Sie, dass der Wert vonName mit dem Namen der RessourceFileDaemonund der Wert vonPasswordmit dem Kennwort der RessourceDirectorauf dem Client-Server übereinstimmen sollte - diese Werte kann in/etc/bacula/bacula-fd.conf
auf jedem Bacula-Client-Server gefunden werden:
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
}
Erstellen Sie für jeden verbleibenden Bacula-Client-Server eine ähnliche Client-Ressource. In unserem Beispiel sollten vier Client-Ressourcen vorhanden sein, wenn wir fertig sind:db1-fd,app1-fd,app2-fd undlb1-fd. Dadurch wird der Bacula Director auf dembackups-Server so konfiguriert, dass er auf jedem Server eine Verbindung zum Bacula-Client herstellen kann.
Speichern und schließen.
Weitere Details zu diesem Abschnitt finden Sie inInstall and Configure Bacula Client inHow To Back Up an Ubuntu Server with Bacula tutorial.
Erstellen Sie Sicherungskopien Ihrer 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 Datenbankserverdb1, indem Sie diesem Tutorial folgen:How To Create Hot Backups of MySQL Databases with Percona XtraBackup on Ubuntu 14.04. Halten Sie an, wenn Sie den AbschnittPerform Full Hot Backup 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 Namenrun_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=bkpuser --password=bkppassword --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 bei/data/backups/full
gelöscht und eine neue vollständige Sicherung erstellt. Weitere Informationen zum Erstellen von Backups mit XtraBackup finden Sie im AbschnittPerform 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, den Datenbankserver zu sichern. Eine gute Lösung besteht darin, Ihren Bacula-Sicherungsjob so zu konfigurieren, dass das Skript als "Pre-Backup-Skript" ausgeführt wird. Wir werden uns jedoch dafür entscheiden,cron job zu verwenden, 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
30 22 * * * 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 Bacula derzeit täglich um 23:05 Uhr seine Sicherungsjobs ausführen 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, schauen wir uns die Bacula-Backup-Dateisätze an.
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 dierequired backupsenthalten, die wir in unseren Wiederherstellungsplänen angegeben haben. Weitere Informationen zum Hinzufügen von FileSets zu Bacula finden Sie im AbschnittAdd FileSets (Server) des Bacula-Tutorials.
Öffnen Sie auf dem Server Ihresbackupsdie Dateifilesets.conf
:
sudo vi /etc/bacula/conf.d/filesets.conf
Database Server FileSet
Die erforderlichen Sicherungen für unseren Datenbankserver gemäß unserem Datenbankserver-Wiederherstellungsplan umfassen:
-
MySQL database: Eine Sicherungskopie wird von unserem XtraBackup-Skript in
/data/backups/full
täglich um 22:30 Uhr erstellt -
MySQL configuration: befindet sich in
/etc/mysql
Wir werden auch das XtraBackup-Skript/usr/local/bin/run_xtrabackup.sh
und die zugehörige Cron-Datei einschließen.
In Anbetracht unserer erforderlichen Backups werden wir dieses "MySQL-Datenbank" -Dateiset zu unserer Bacula-Konfiguration hinzufügen:
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
}
}
Fahren wir nun mit dem Anwendungsserver FileSet fort.
Anwendungsserver-Dateigruppe
Die erforderlichen Sicherungen für Ihre Anwendungsserver gemäß Ihrem Wiederherstellungsplan für Anwendungsserver umfassen Folgendes:
-
Application Files: befindet sich in unserem Beispiel in
/var/www/html
In Anbetracht unserer erforderlichen Backups werden wir dieses "Apache DocumentRoot" -Dateiset zu unserer Bacula-Konfiguration hinzufügen:
filesets.conf — Apache DocumentRoot
FileSet {
Name = "Apache DocumentRoot"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /var/www/html
}
Exclude {
File = /var/www/html/exclude
}
}
Möglicherweise möchten Sie auch die Konfigurationsdatei für Apache-Ports einschließen, diese kann jedoch problemlos ersetzt werden.
Gehen wir nun zum Load-Balancer-Server FileSet über.
Load Balancer Server FileSet
Die erforderlichen Sicherungen für unsere Load-Balancer-Server gemäß unserem Load-Balancer-Server-Wiederherstellungsplan umfassen:
-
SSL Certificate (PEM) and related files: befindet sich in unserem Beispiel in
/root/certs
-
HAProxy configuration file: befindet sich in
/etc/haproxy
In Anbetracht unserer erforderlichen Backups werden wir dieses "Apache DocumentRoot" -Dateiset zu unserer Bacula-Konfiguration hinzufügen:
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
}
}
Speichern und schließen.
Jetzt sind unsere FileSets konfiguriert. Fahren wir mit der Erstellung der Bacula-Sicherungsjobs fort, die diese FileSets verwenden.
Erstellen Sie Bacula-Sicherungsjobs
Wir werden Bacula-Backup-Jobs erstellen, die ausgeführt werden, und Backups unserer Server erstellen.
Erstellen Sie einejobs.conf
-Datei in/etc/bacula/conf.d
:
sudo vi /etc/bacula/conf.d/jobs.conf
Datenbankserver-Sicherungsjob
Für unseren Datenbankserver-Sicherungsjob erstellen wir einen neuen Job mit dem Namen "Backup db1". Wichtig hierbei ist, dass wir die richtigenClient (db1-fd) undFileSet (MySQL-Datenbank) angeben:
jobs.conf — Backup db1
Job {
Name = "Backup db1"
JobDefs = "DefaultJob"
Client = db1-fd
Pool = RemoteFile
FileSet="MySQL Database"
}
Jetzt richten wir die Sicherungsjobs für den Anwendungsserver ein.
Anwendungsserver-Sicherungsjobs
Für unsere Anwendungsserver erstellen wir zwei Sicherungsjobs mit den Namen "Sicherungs-App1" und "Sicherungs-App2". Wichtig hierbei ist, dass wir die richtigenClients (app1-fd und app2-fd) undFileSet (Apache DocumentRoot) angeben.
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"
}
Jetzt richten wir den Sicherungsjob für den Load Balancer-Server ein.
Load Balancer Server-Sicherungsjob
Für unseren Lastausgleichsserver-Sicherungsjob erstellen wir einen neuen Job mit dem Namen "Backup lb1". Wichtig hierbei ist, dass wir die richtigenClient (lb1-fd) undFileSet (SSL Certs und HAProxy Config) angeben:
jobs.conf — Backup lb1
Job {
Name = "Backup lb1"
JobDefs = "DefaultJob"
Client = lb1-fd
Pool = RemoteFile
FileSet="SSL Certs and HAProxy Config"
}
Speichern und schließen.
Jetzt sind unsere Backup-Jobs konfiguriert. Der letzte Schritt ist der Neustart des Bacula Director.
Starten Sie Bacula Director neu
Starten Sie auf dembackups-Server den Bacula Director neu, um alle unsere Änderungen zu übernehmen:
sudo service bacula-director restart
An diesem Punkt möchten Sie Ihre Clientverbindungen und Sicherungsjobs testen, die beide inHow To Back Up a Server with Bacula tutorial behandelt werden. In diesem Tutorial erfahren Sie auch, wie Sie Bacula-Backups wiederherstellen. Beachten Sie, dass Sie zum Wiederherstellen der MySQL-Datenbank den SchrittPerform Backup Restoration im Percona XtraBackup-Lernprogramm ausführen müssen.
Überprüfen Sie den Sicherungszeitplan
Der Bacula-Sicherungsplan kann durch Ändern der Bacula Director-Konfiguration (/etc/bacula/bacula-dir.conf
) angepasst werden. Alle von uns erstellten Sicherungsjobs verwenden 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 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
Sie können den Zeitplan für Ihre Sicherungsjobs jederzeit ändern oder hinzufügen. Es ist sinnvoll, den Zeitplan der Anwendungsserver so zu ändern, dass er zur gleichen Zeit ausgeführt wird, zu der das Percona XtraBackup-Skript ausgeführt wird (22.30 Uhr). Dies verhindert, dass die Sicherungen der Anwendung und der Datenbank inkonsistent sind.
Einrichten von Remote-Sicherungen
Jetzt können wir einen Remote-Server einrichten, auf dem Kopien unserer 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. In unserem Beispiel verwenden wir die Region San Francisco (SFO1) von DigitalOcean für den Serverremotebackups.
Wir werden eine einfache Methode erklären, um unsere Backups von unserembackups-Server mit öffentlichen SSH-Schlüsseln, rsync und cron an unserenremotebackups-Server zu senden.
Auf dem Server vonremotebackupscreate a user, die für die rsync-Anmeldung verwendet werden.
Generieren Sie als Nächstes auf dembackups-Server ein SSH-Schlüsselpaar ohne Kennwort als Root. Installieren Sie den öffentlichen Schlüssel auf dem Benutzer vonremotebackups, den Sie gerade erstellt haben. Dies wird in unseremHow To Set Up SSH KeysTutorial behandelt.
Schreiben Sie auf dembackups-Server einen rsync-Befehl, der die Bacula-Sicherungsdaten (/bacula/backup
) irgendwo auf denremotebackups-Server kopiert. Die Rsync-Nutzung wird inHow To Use Rsync tutorial abgedeckt. Der Befehl sieht wahrscheinlich so aus:
rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup
Fügen Sie den Befehl einem Skript hinzu, z. B./usr/local/bin/rsync_backups.sh
, und machen Sie ihn ausführbar.
Zuletzt möchten Sie einen Cron-Job einrichten, der dasrsync_backups.sh
-Skript als Root ausführt, nachdem die Bacula-Sicherungsjobs normalerweise abgeschlossen sind. Dies ist in unserenHow To Schedule Routine Tasks With Cron tutorial abgedeckt.
Nachdem Sie dies alles eingerichtet haben, stellen Sie sicher, dass am nächsten Tag eine Kopie Ihrer Sicherungen auf dem Server vonremotebackupsvorhanden ist.
Andere Überlegungen
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.
Möglicherweise möchten Sie nicht nur Sicherungen Ihrer Anwendungsserver erstellen, sondern auch Sicherungen für alle anderen Server einrichten, die Ihrem Setup hinzugefügt wurden. Sie sollten Bacula beispielsweise so konfigurieren, dass Backups Ihrer Überwachungs- und zentralen Protokollierungsserver erstellt werden, sobald Sie diese in Betrieb genommen haben.
Fazit
Sie sollten jetzt über tägliche Sicherungen und eine Remote-Kopie dieser Sicherungen Ihrer Produktionsanwendungsserver verfügen. Stellen Sie sicher, dass Sie die Dateien wiederherstellen können, und fügen Sie die Schritte zum Wiederherstellen Ihrer Daten zu Ihren Wiederherstellungsplänen hinzu.
Fahren Sie mit dem nächsten Lernprogramm fort, um die Überwachung für Ihr Produktionsserver-Setup einzurichten:Building for Production: Web Applications — Monitoring.