Automatisierte Backups mit Bareos und Puppet

- Erstellt in Backup

Backups sind vielfach ein essentieller Bestandteil von Computersystemen. Sie dürfen nicht vernachlässigt werden. Da unsere Server und die der Kunden mit Puppet aufgesetzt und konfiguriert sind, benötigen wir keine Disaster Recovery Backup-Strategien, ebenso können wir auf das Backup von statischen Konfigurationsdaten von Applikationen und des Betriebssystems verzichten, da diese per Puppet deployed werden.

Grundsätzlich sichern wir nur variable Daten wie Log-Files, Datenbanken, User-Uploads, etc.

Wie funktioniert Bareos?

Bareos besteht aus mehreren Komponenten. Die drei wichtigsten sind hierbei der Director, der Storage Daemon und der File Daemon.

Director

Der Director übernimmt alle zentralen Aufgaben einer Backup-Lösung. Er verwaltet alle Backups, Zeitpläne, Volumes, Clients, etc. Desweiteren verifiziert und überwacht er den Status von Backups und steuert die Wiederherstellung von Daten.

Der Director teilt dem File Daemon mit, was und wann gesichert wird und löst das Backup auf dem Client aus.

Storage Daemon

Der Storage Daemon ist verantwortlich für die effektiven Daten, die gesichert werden. Der Dienst schreibt und liest die Daten auf das konfigurierte Medium (Tape oder Disk). Vielfach läuft der Storage Daemon auf dem selben Server wie der Director.

File Daemon

Der File Daemon ist der Dienst, der auf dem Client läuft, welcher gesichert wird. Der File Daemon sendet die zu sichernden Daten an den Storage Daemon.

Weitere Komponenten

Es gibt noch weitere Komponenten von Bareos, auf die ich hier aber nicht weiter eingehe:

  • Catalog: Datenbank, die die Indizes aller Files und Volumes enthält. Dies erlaubt es, schnell und einfach wiederherzustellende Daten zu finden.
  • Console: einfaches CLI zur Administration von Bareos.

Architektur

enter image description here

Einfaches Backup mit Bareos

Dieser Abschnitt demonstriert ein einfaches Setup mit einem Server und einem Client. Das Setup ist wie folgt:

Servername
- backuphost: IP 192.168.215.11 - backupclient: IP 192.168.215.12

Server Installation

Die Installation ist relativ simpel. Wir fügen zuerst das Apt-Repo hinzu und installieren anschliessend die nötigen Pakete:

echo "deb http://download.bareos.org/bareos/release/latest/xUbuntu_14.04/ /" > /etc/apt/sources.list.d/bareos.list
wget http://download.bareos.org/bareos/release/latest/xUbuntu_14.04/Release.key -O- | apt-key add -
apt-get update 
apt-get install bareos bareos-database-postgresql (alternativ kann auch bareos-database-mysql ausgewählt werden)

Anschliessend muss die Datenbank für Bareos vorbereitet werden:

su postgres -c /usr/lib/bareos/scripts/create_bareos_database 
su postgres -c /usr/lib/bareos/scripts/make_bareos_tables 
su postgres -c /usr/lib/bareos/scripts/grant_bareos_privileges

Anschliessend können die Backup-Dienste gestartet werden:

service bareos-dir start 
service bareos-sd start 
service bareos-fd start

Für dieses Test-Setup deaktivieren wir die Firewall:

sudo iptables -F

Server Konfiguration

Die diversen Konfigurationsdateien befinden sich im Ordner /etc/bareos/. Die wichtigsten Dateien hier sind bareos-dir.conf, bareos-sd.conf sowie bareos-fd.conf. Für den Server benötigen wir nur die Konfigurationsdateien bareos-dir.conf und bareos-sd.conf. Die Datei bareos-fd.conf konfiguriert den File Daemon.

Die Standard-Konfiguration, die mitgeliefert wird, ist relativ aufgebläht und unübersichtlich. In einer Produktiv-Umgebung kann es Sinn machen, die verschiedenen Elemente in einzelne Dateien auszulagern. Für den Moment muss der Name des Directors in der Datei bareos-dir.conf im Abschnitt Director sowie im Abschnitt Console notiert werden. In diesem Beispiel Setup ist der Name des Directors backuphost-dir und der des Monitors backuphost-mon.

Client Installation

Die Installation auf dem Client ist ähnlich der Installation auf dem Server. Wir fügen zuerst das Apt-Repo hinzu und installieren anschliessend das Bareos Client Paket:

echo "deb http://download.bareos.org/bareos/release/latest/xUbuntu_14.04/ /" > /etc/apt/sources.list.d/bareos.list
wget http://download.bareos.org/bareos/release/latest/xUbuntu_14.04/Release.key -O- | apt-key add -

apt-get update 
apt-get install bareos-filedaemon

Auch auf dem Client deaktivieren wir die Firewall:

sudo iptables -F

Client Konfiguration

Nach der erfolgreichen Installation müssen wir nun den Client konfigurieren, damit er mit dem Director kommunizieren kann. Hierfür bearbeiten wir die Datei /etc/bareos/bareos-fd.conf. Dabei müssen wir in den zwei Director-Abschnitten den weiter oben notierten Namen des Directors (backuphost-dir) und des Monitors (backuphost-mon) setzen. Das Passwort kann so belassen oder neu gesetzt werden, muss aber auf jeden Fall für später notiert werden.

Ebenfalls muss der Name des Clients im Abschnitt File Daemon notiert werden. Im unserem Beispiel sieht die Konfiguration wie folgt aus:

#
# List Directors who are permitted to contact this File daemon
#
Director {
  Name = backuphost-dir
  Password = "GHyLdSVAVUZhBy1GUpEq2YFw53HTcY3yO8lfvsAIoUD/"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
  Name = backuphost-mon
  Password = "RAUlkTh+4RMiBtpzNc6NeCjuKpSrnfwjybDivwu+oRfl"
  Monitor = yes
}

#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
  Name = backupclient-fd
  Maximum Concurrent Jobs = 20
}

# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = backupclient-dir = all, !skipped, !restored
}

Anschliessend muss der File Daemon neu gestartet werden:

sudo service bareos-fd restart

Client Konfiguration auf dem Server

Anschliessend konfigurieren wir den Client auf dem Server. Dazu fügen wir die folgende Konfiguration in der Datei bareos-dir.conf hinzu:

Client {
  Name = backupclient-fd
  Address = 192.168.215.12  # kann auch ein FQDN sein.
  Password = "GHyLdSVAVUZhBy1GUpEq2YFw53HTcY3yO8lfvsAIoUD/"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = no
}

Anschliessend müssen wir einen Job für den Client definieren. Dazu verwenden wir den schon vorhandenen "DefaultJob" als Template sowie das bestehende FileSet "Linux All":

Job {
    Name = "backupclient-job"
    Client = backupclient-fd
    JobDefs = "DefaultJob"
    FileSet = "Linux All"
}

Danach muss der Director neu gestartet werden:

sudo service bareos-dir restart

Nun können wir schon einen ersten Backupjob laufen lassen. Dazu starten wir das Bareos CLI bconsole:

# bconsole
* run job=backupclient-job

Dies startet den Backupjob. Mittels dem Befehl 'status job=backupclient-job' kann der Status des Jobs überwacht werden. Ausgaben können mittels 'messages' angeschaut werden.

Puppet und Bareos

Wir bei VSHN verwalten alle Server mit Puppet, daher liegt es auf der Hand, dass auch das Backup mittels Puppet konfiguriert und automatisiert wird. Wichtig ist dabei, dass die verwendete Backup-Software mit Puppet konfigurierbar ist.

Bareos ist eine Backuplösung, welche komplett über Textdateien konfiguriert wird. Daher ist Bareos ideal für den Einsatz mit Puppet.

Wir haben ein eigenes Puppet Modul entwickelt, welches die komplette Konfiguration des Servers sowie des Clients übernimmt. Dabei gibt es grundsätzlich zwei Klassen, die verwendet werden: vshn_bareos::server und vshn_bareos::client.

Somit sieht ein einfaches Setup mit Puppet wie folgt aus:

Server

class { 'vshn_bareos::server':
    is_director => true,
    is_storage => true,
    is_traymon => true,
    message_all_mail_to => 'devnull@vshn.net',
    messages_operator_mail_to => 'ops@vshn.net',
    messages_error_mail_to => 'ops@vshn.net',
    messages_mail_from => 'bareos@vshn.net',
}

Die ersten drei Parameter sind optional und sind standardmässig auf true gesetzt. Die letzten vier Parameter definieren, an welche Adresse diverse E-Mail-Benachrichtigungen von Bareos gesendet werden. Damit ist der Bareos-Server bereits installiert und lauffähig. Jetzt müssen nur noch die Clients konfiguriert werden.

Client

class { 'vshn_bareos::client':
    director_address => 'backup1.vshn.net',
}

Dies ist die minimale Konfiguration des Clients. Damit wird die Software auf dem Client installiert, der korrekte Director in der Konfiguration eingetragen und eine Client-Konfiguration inkl. Pool, Job, FileSet und Schedules auf dem Server abgelegt.

Die Clientconfig kann natürlich noch erweitert werden. z.B kann ein spezifisches Fileset angegeben werden:

class { 'vshn_bareos::client':
    director_address => 'backup1.vshn.net',
    fileset => {
        include => [
            '/etc',
            '/usr',
            '/var',
        ],
        exclude => [
            '/usr/local',
            '/var/spool',
        ],
    }
}

Fazit

Bareos eignet sich ideal zur Automatisierung des Backup-Prozesses mittels eines Configuration Managment Systems wie Puppet.

---