Cold-standby-Backup¶
mailcow bietet eine einfache Möglichkeit, eine konsistente Kopie von sich selbst zu erstellen, die per rsync an einen entfernten Ort ohne Ausfallzeit übertragen werden kann.
Dies kann auch verwendet werden, um Ihre mailcow auf einen neuen Server zu übertragen.
Das sollten Sie wissen¶
Das bereitgestellte Skript funktioniert auf Standardinstallationen.
Es kann kaputt gehen, wenn Sie nicht unterstützte Volume Overrides verwenden. Wir unterstützen das nicht und wir werden keine Hacks einbauen, die das unterstützen. Bitte erstellen und pflegen Sie einen Fork, wenn Sie Ihre Änderungen beibehalten wollen.
Das Skript wird die gleichen Pfade wie Ihre Standard-Mailcow-Installation verwenden. Das ist das mailcow-Basisverzeichnis - für die meisten Nutzer /opt/mailcow-dockerized
- sowie die Mountpoints.
Um die Pfade Ihrer Quellvolumes zu finden, verwenden wir docker inspect
und lesen das Zielverzeichnis jedes Volumes, das mit Ihrem mailcow compose Projekt verbunden ist. Das bedeutet, dass wir auch Volumes übertragen, die Sie in einer Override-Datei hinzugefügt haben. Lokale Bind-Mounts können funktionieren, müssen aber nicht.
Die Verwendung von rsync mit dem --delete
Flag. Das Ziel wird eine exakte Kopie der Quelle sein.
mariabackup
wird verwendet, um eine konsistente Kopie des SQL-Datenverzeichnisses zu erstellen.
Nach dem Rsync der Daten führen wir docker-compose pull
aus und entfernen alte Image-Tags aus dem Ziel.
Ihre Quelle wird zu keinem Zeitpunkt verändert.
**Sie sollten sicherstellen, dass Sie die gleiche /etc/docker/daemon.json
auf dem entfernten Ziel verwenden.
Sie sollten keine Festplatten-Snapshots (z. B. über ZFS, LVM usw.) auf dem Ziel ausführen, während dieses Skript ausgeführt wird.
Die Versionierung ist nicht Teil dieses Skripts, wir verlassen uns auf das Ziel (Snapshots oder Backups). Sie können dafür auch jedes andere Tool verwenden.
Vorbereiten¶
Sie benötigen ein SSH-fähiges Ziel und eine Schlüsseldatei, um sich mit diesem Ziel zu verbinden. Der Schlüssel sollte nicht durch ein Passwort geschützt sein, damit das Skript unbeaufsichtigt arbeiten kann.
In Ihrem mailcow-Basisverzeichnis, z.B. /opt/mailcow-dockerized
, finden Sie eine Datei create_cold_standby.sh
.
Bearbeiten Sie diese Datei und ändern Sie die exportierten Variablen:
export REMOTE_SSH_KEY=/pfad/zur/keyfile
export REMOTE_SSH_PORT=22
export REMOTE_SSH_HOST=mailcow-backup.host.name
Der Schlüssel muss im Besitz von root sein und darf nur von diesem gelesen werden können.
Sowohl die Quelle als auch das Ziel benötigen rsync
>= v3.1.0.
Das Ziel muss über Docker und docker-compose v1 verfügen.
Das Skript wird Fehler automatisch erkennen und sich beenden.
Sie können die Verbindung testen, indem Sie ssh mailcow-backup.host.name -p22 -i /path/to/keyfile
ausführen.
Backup und Aktualisierung des Cold-Standby¶
Starten Sie das erste Backup, dies kann je nach Verbindung eine Weile dauern:
bash /opt/mailcow-dockerized/create_cold_standby.sh
Das war einfach, nicht wahr?
Das Aktualisieren des Cold-Standby ist genauso einfach:
bash /opt/mailcow-dockerized/create_cold_standby.sh
Es ist derselbe Befehl.
Automatisierte Backups mit cron¶
Stellen Sie zunächst sicher, dass der cron
Dienst aktiviert ist und läuft:
systemctl enable cron.service && systemctl start cron.service
Um die Backups auf dem Cold-Standby-Server zu automatisieren, können Sie einen Cron-Job verwenden. Um die Cron-Jobs für den Root-Benutzer zu bearbeiten, führen Sie aus:
crontab -e
Fügen Sie die folgenden Zeilen hinzu, um den Cold-Standby-Server täglich um 03:00 Uhr zu synchronisieren. In diesem Beispiel werden Fehler der letzten Ausführung in einer Datei protokolliert.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2> /var/log/mailcow-coldstandby-sync.log
Wenn korrekt gespeichert, sollte der Cron-Job durch Eingabe angezeigt werden:
crontab -l