Wie unsere Backups funktionieren und was Btrfs damit zu tun hat
Backups und Offsite-Backups sind wichtig. In diesem Blogpost möchte ich genauer darauf eingehen und erklären, weshalb das bei uns wirklich cool gelöst ist und wie du als Kundin oder Kunde davon profitierst.
Ein Offsite-Backup gehört bei uns schon seit je her dazu. Früher haben wir das mit BackupPC gelöst, was zwar grundsätzlich gut funktioniert, jedoch nicht so performant skaliert, wie wir das gerne hätten. Anfang 2020 haben wir deshalb eine für uns wichtige Entscheidung getroffen und sind für unsere Managed Server von ex4 auf Btrfs umgestiegen.
Btrfs (auch „Butter FS“ genannt) ist fester Bestandteil des Linux Kernels und wird von der Community stark vorangetrieben. So ist beispielsweise Fedora Ende 2020 auf Btrfs als Standard-Filesystem umgestiegen. Als Copy-on-write Filesystem ist Btrfs ideal, um Backups über Snapshots zu lösen.
Lokale Snapshots
Managed Server ab Version 7 erstellen einmal täglich einen Filesystem Snapshot, jeder Snapshot wird für 30 Tage aufbewahrt. Alle Snapshots sind immer in ~/backup
read-only gemountet und für Website-User per SSH und SFTP zugänglich. Das erlaubt dir, selbstständig und ohne Wartezeit auf Daten aus den Snapshots zuzugreifen. Nachfolgend ein paar Beispiele.
Ein File oder ein Verzeichnis gelöscht? Eine Sache von wenigen Sekunden:
$ ls -l ~/backup
lrwxrwxrwx 1 root root 34 Feb 16 03:21 20210216
(..)
lrwxrwxrwx 1 root root 34 Mar 15 03:21 20210315
lrwxrwxrwx 1 root root 34 Mar 16 03:22 20210316
lrwxrwxrwx 1 root root 34 Mar 17 03:21 20210317
$ cp ~/backup/20210317/www/index.php ~/www/index.php
Unsicher, ob an einem File etwas verändert wurde? Da alle Snapshots jederzeit read-only gemountet sind, kannst du bekannte UNIX-Programme wie beispielsweise diff
wie gewohnt nutzen:
$ diff ~/backup/20210311/www/assets/style.css ~/www/assets/style.css
> .jumbotron {
> background-size: cover;
> }
Die Vorteile liegen auf der Hand: Du kannst 30 Tage lang auf das lokale Backup zugreifen,
- ohne davor einen Restore beantragen zu müssen;
- ohne zu warten, bis die Daten von einem externen Storage System auf den Server kopiert werden;
- ohne, dass du die Backups über ein Webportal herunterladen musst,
- und das alles völlig selbstständig.
Da die Daten bereits auf dem lokalen Filesystem vorhanden sind, kannst du deine Daten direkt auf der Konsole vergleichen, nachvollziehen und kopieren. Selfservice par excellence, was dir im Fall der Fälle einen riesigen Geschwindigkeitsvorteil bringt – bei einem Restore häufig nicht ganz unerheblich. Selbstverständlich werden die Snapshots auch offsite abgelegt. Dazu unten mehr.
MySQL Restore
Auch für Datenbanken haben wir uns etwas überlegt. Regelmässige MySQL-Dumps benötigen Rechenleistung (die dann deiner Applikation fehlt) und Speicherplatz. Deswegen verzichten wir komplett auf MySQL-Dumps. Stattdessen steht dir mit mysqlrestore
ein Programm zur Verfügung, welches sich ebenfalls an den bereits vorhandenen Snapshots bedient.
Das Programm startet im Hintergrund einen zweiten Datenbank-Server und stellt diesen über einen anderen Port und Socket zur Verfügung. Damit kannst du direkt auf einen alten Stand deiner Datenbank zugreifen, ohne zuerst von Hand einen Dump importieren zu müssen:
$ mysqlrestore
Please select snapshot:
1) /snapshot/20210216
2) /snapshot/20210217
3) /snapshot/20210218
#? 2
MariaDB is starting... please wait.
A second temporary MySQL server with the selected snapshot is now running.
Use socket /tmp/mysqld_restore.sock or port [::1]:3307 to connect to the mysql server.
Sobald die zweite Datenbank läuft, kannst du darauf zugreifen und die benötigten Daten exportieren. Theoretisch kannst du sogar temporär deine Live-Applikation auf eine alte Version der Datenbank umstellen, falls dir das beim Wiederherstellen hilft.
$ mysql --socket=/tmp/mysqld_restore.sock
$ mysql --host=::1 --port=3307
$ mysqldump --socket=/tmp/mysqld_restore.sock <db-name> > ~/dump.sql
$ mysqldump --socket=/tmp/mysqld_restore.sock <db-name> | mysql
Offsite-Snapshots
Snapshots sind keine vollwertigen Backups, solange sie nicht auch offsite aufbewahrt werden. Während unsere Managed Server in Zürich stehen, werden alle Snapshots zusätzlich nach Luzern gespiegelt und at-rest verschlüsselt. Technisch nutzen wir dazu Btrfs send/receive, was für uns den Vorteil hat, sehr ressourcenschonend zu sein.
Da Btrfs als Filesystem bereits bestens über alle Files Bescheid weiss, werden nur Daten übertragen, welche am Ziel noch fehlen. Auf Dateisystemebene passiert das sehr effizient. Auch umgekehrt sind wir in der Lage, Snapshots mit Btrfs send/receive an einen beliebigen Server zu senden und dann auch davon zu booten. Etwas, was wir regelmässig testen, aber hoffentlich nie benötigen werden.
Fazit
Daten wiederherstellen zu müssen, ist nie etwas Angenehmes, trotzdem oder nur schon deshalb sind wir bemüht, diesen Prozess so einfach wie möglich zu gestalten. Wir glauben, dass uns das mit Btrfs gelungen ist.
Du bist noch kein Kunde, unsere Lösung hat dich aber voll überzeugt? Melde dich unbedingt bei uns, jederzeit und unverbindlich auf dem Kanal deiner Wahl – wir freuen uns auf deine Kontaktaufnahme!