Tech

Automatisierte Backups mit Bareos und Puppet

10. Dec 2015

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
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  /" > /etc/apt/sources.list.d/bareos.list
wget  -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  /" > /etc/apt/sources.list.d/bareos.list
wget  -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.

Nicolas Bigler

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us