Backup-Infrastruktur mit Restic und SaltStack aufbauen
Restic ist ein einfaches aber sehr mächtiges Backup-Programm. Gepaart mit Salt können Sie Backups vollautomatisch durchführen und über den Salt-Master zentral steuern. Ein einfacher SSH-Server dient als zentraler Speicher für die Backups.
Backup-Server vorbereiten
Restic kann auf einer Vielzahl von Zielen die Backups ablegen. SFTP bzw. SSH gehört dazu, was mit jedem Linux-System einfach zu realisieren ist.
Grundsätzlich kann jeder Benutzer-Account verwendet werden, ein eigener Benutzer resticist empfohlen, um das System „ordentlich“ zu halten. Restic authentifiziert sich ausschließlich per SSH-Key. Legen Sie einen neuen Benutzer an und generieren Sie SSH Schlüssel.
## Create a restic user#restic-group:group.present: - name:resticrestic:user.present: - fullname:Restic Backup - shell:/bin/bash - home:/var/lib/restic - createhome:true - system:true - groups: - restic - require: - group:restic-groupbzip2:pkg.installed: []## Download restic from github (the debian packages are quite outdated)#{% set version = '0.16.2' %}download-restic:file.managed: - name:/var/tmp/restic_{{ version }}_linux_amd64.bz2 - source:https://github.com/restic/restic/releases/download/v{{ version }}/restic_{{ version }}_linux_amd64.bz2 - user:restic - group:restic - mode:0755 - require: - bzip2## Install restic by unpacking the compressed binary#install-restic:cmd.run: - name:| set -e which bunzip2 bunzip2 -k /var/tmp/restic_{{ version }}_linux_amd64.bz2 -c > restic chmod 0700 restic ./restic version rm -f /var/tmp/restic_{{ version }}_linux_amd64.bz2 - cwd:/var/lib/restic - runas:restic - unless: - /var/lib/restic/restic version|grep -q {{ version }} - require: - file:download-restic - pkg:bzip2/var/lib/restic/restic:file.managed: - mode:0700 - user:restic - require: - install-restic/var/lib/restic/.ssh/:file.directory: - user:restic - group:restic - mode:0700
😯 Probleme:
Wenn Sie Downloads aus dem Internet ungeprüft in Ihr System übernehmen, kann Schadcode ins System gelangen.
Der State download-restic speichert dauerhaft das komprimierte Archiv oder lädt es erneut herunter, wenn es auf dem temporären Verzeichnis gelöscht wurde.
🧩 Aufgaben: Optimieren Sie den State. Nutzen Sie eine der folgenden Optionen:
Erweitern Sie den State mit einer Prüfsummen-Prüfung. Der Download darf nur dann verwendet werden, wenn die Prüfsumme stimmt. Suchen Sie dazu in der Dokumentation nach dem Stichwort source_hash.
Fügen Sie eine unless Bedingung ein, damit der Download nicht mehr ausgeführt wird, sobald restic erfolgreich installiert wurde.
Laden Sie das komprimierte Archiv zuerst auf den Salt-Master herunter, entpacken Sie es und verteilen Sie es von dort.
Backup-Server ausrollen
Restic kann die Sicherungskopien auf einer Vielzahl von Fileservern abspeichern. In einem Intranet ist der in SSH integrierte SFTP-Server die einfachste Lösung. Das bedeutet, Sie benötigen keine spezielle Server-Software. Der Server muss lediglich den passenden SSH-Private-Key nutzen, der zum Public-Key der Clients passt.
Oder prüfen Sie die Backups direkt auf dem Backup-Server, indem Sie die verschlüsselte Backupdatei auf dem Backup-Server mounten.
# Change to the restic user account
root@server:~# su - restic
# Create a folder to mount a backup
restic@server:~$ mkdir -p mnt/<MINION_ID>
# Mount a backup
restic@server:~$ ./restic -r <MINION_ID> mount mnt/<MINION_ID>/ -p <MINION_ID>/.restic-password
Das zum Mounten benötigte Password entnehmen Sie der Datei /var/cache/salt/master/minions/<CLIENT>/files/var/lib/restic/.restic-password auf dem Salt-Master.
Falls Sie das Backup nicht mounten können, ist das fuse Paket nicht installiert. Erweitern Sie den restic.server State und installieren Sie darüber das benötigte Paket.
Backups überwachen
Optional können Sie mit dem kostenlosen Dienst Betteruptime.com ein Monitoring der Backups einrichten.
Mit diesem State wird ein Monitoring Item auf dem Dashboard von Betteruptime registriert. Dieses Item erwartet alle 24 Stunden eine positive Rückmeldung, andernfalls wird ein Alarm ausgelöst. Erweitern Sie das Skript, welches das Backup durchführt, mit folgender Zeile: