Viele nutzen Ihre Einplatinencomputer wie den Raspberry Pi oder einen Banana Pi im Dauereinsatz als „Server“. Dabei gibt es natürlich einiges zu beachten, damit ein stabiler 24/7 Einsatz so reibungslos wie möglich funktioniert. In diesem Beitrag möchte ich ein paar Möglichkeiten zeigen, um den manuellen Aufwand der Systempflege zu minimieren. Dazu gehören die folgenden Themenblöcke:
- Backup des Systems bzw. einzelner Daten
- Watchdog zur automatischen Systemüberwachung
- Netzwerk Überwachung
- Dienste im Fehlerfall neu starten
Backup:
Anforderungen an ein Backup können sehr unterschiedlich sein. Generell ist es sinnvoll sich ein komplettes Image zu erzeugen, um im Fehlerfall eine schnelle und komfortable Wiederherstellung zu haben. Eine sehr gute Möglichkeit hierfür bietet die OpenSource Lösung Clonezilla. Eine komplette Vorgangsbeschreibung ist hier zu finden: Klick
Sollen einzelne Daten, Datenbanken etc. gesichert werden, lässt sich das mit Shell Skripten bequem erledigen. Da hier jedoch die Anforderungen zu unterschiedlich sind, möchte ich auf einen Beitrag verlinken, in dem Seafile per Skript gesichert werden kann. Die Befehle können als Vorlage verwendet werden. Klick
Wichtig ist natürlich, dass die Sicherungen immer auf mindestens einem externen Medium abgelegt werden, damit im Ernstfall die Daten nicht verloren sind.
Watchdog:
Ein Watchdog ist eine kleine Hardwarekomponente auf dem Raspberry Pi oder auch Banana Pi, welche die Funktionen von anderen Komponenten überwachen kann. Über eine Konfigurationsdatei kann festgelegt werden, was alles überwacht werden soll. Dabei ist jedoch Vorsicht geboten, da eine Fehlkonfiguration zu einer Neustart Dauerschleife führen kann. Um den Watchdog zu nutzen, muss ein Stück Software nachinstalliert werden.
Installation unter Raspbian:
sudo apt-get install watchdog
Installation unter Arch:
sudo pacman -S watchdog
Auf dem Raspberry Pi sollte das dafür benötigte Kernel Modul „bcm2835_wdt“ bereits geladen sein. Dies lässt sich mit dem Befehl „lsmod“ überprüfen.
lsmod
Beim Banana Pi heißt das Modul „sunxi_wdt“. Sollte es nicht geladen sein, lässt es sich einfach nachladen.
modprobe bcm2835_wdt
Damit es auch nach einem Neustart zur Verfügung steht, muss das Modul noch in die Datei „/etc/modules“ eingetragen werden. Dies ist jedoch nur dann nötig, wenn es nicht schon automatisch geladen wird. Jetzt kann der Watchdog konfiguriert werden.
sudo nano /etc/watchdog.conf
Für die generelle Konfiguration werden die Kommentare bei folgenden Zeilen entfernt.
max-load-1 = 24 watchdog-device = /dev/watchdog
Der Wert „max-load“ bedeutet, dass das System neu startet, wenn mindestens eine Minute lang eine Last von mind. 24% besteht. Mit dem Wert kann natürlich nach Belieben experimentiert werden. Das „watchdog-device“ regelt den Keep Alive support. Zusätzlich wird noch folgende Zeile hinzugefügt, da ansonsten bei der systemd Statusabfrage von Watchdog ein Timeout Fehler erscheint.
watchdog-timeout=15
Die Netzwerküberwachung über den Parameter „Interface“ hat bei meinen Tests zu einer Neustart Dauerschleife geführt. Selbst eine Dienstverzögerung, die wartet bis das Netzwerk erfolgreich aufgebaut ist, hat hier nicht geholfen. Daher wird dieser Punkt über einen anderen Mechanismus geregelt. Zusätzlich können auch noch einzelne Prozesse überwacht werden. Sollte einer der zu überwachenden Prozesse nicht mehr laufen, wird das System neu gestartet. Um das entsprechende PID File zu finden, kann danach gezielt gesucht werden.
sudo find / -iname *.pid*
Die Ergebnisse können dann in die Watchdog Konfiguration eingetragen werden.
Ist die Konfiguration abgeschlossen, kann Watchdog gestartet werden.
sudo systemctl enable watchdog
sudo systemctl start watchdog
Netzwerk Überwachung:
Da der Raspberry Pi in der Regel über das Netzwerk angesprochen wird, ist es natürlich wichtig, dass das Netzwerk auch ordnungsgemäß funktioniert. Daher sollte die Verfügbarkeit regelmäßig geprüft werden. Mit dem Watchdog ließ sich diese Anforderung nicht umsetzen, da das Gerät dann permanent neu startete. Es ist auch zu hinterfragen, ob ein Neustart zwingend erforderlich ist nur, weil das Netzwerk gerade nicht geht. Daher habe ich dafür ein Skript geschrieben, welches ganz simpel das Netzwerk pingt und bei nicht Verfügbarkeit das Netzwerk neu startet.
sudo nano /usr/local/bin/network_status.sh
#!/bin/bash # global variables gateway="192.168.10.1" interface="eth0" # Ping gateway for network status test /sbin/ping -c4 $gateway > /dev/null # if gateway is not reachable, restart the network interface if [ $? != 0 ] then /sbin/ifdown $interface /sbin/sleep 3 /sbin/ifup --force $interface fi
Das Skript wird noch ausführbar gemacht.
sudo chmod +x /usr/local/bin/network_status.sh
Das Skript lässt sich jetzt mittels eines systemd Timers regelmäßig ausführen.
sudo nano /etc/systemd/system/network_status.service
[Unit] Description=Check Network Status [Service] Type=simple ExecStart=/usr/local/bin/network_status.sh
sudo nano /etc/systemd/system/network_status.timer
[Unit] Description=Runs Check Network Status every 20 minutes [Timer] OnBootSec=10min OnUnitActiveSec=20min Unit= network_status.service [Install] WantedBy=multi-user.target
Jetzt kann der Timer aktiviert und gestartet werden.
sudo systemctl enable network_status.timer
sudo systemctl start network_status.timer
Dienste im Fehlerfall neu starten
Gerade Dienste wie z.B. OpenVPN sind notwendig um aus der Ferne auf heimische Systeme zuzugreifen. Daher ist es wichtig, kritische Dienste, die für den Dauereinsatz erforderlich sind, im Problemfall neu starten zu lassen. Dies lässt sich mit systemd sehr einfach realisieren. Erstmal ist es sinnvoll sich anzeigen zu lassen, welche Dienste vorhanden sind.
systemctl list-units --type=service
Nun kann man die einzelnen Service Dateien prüfen und ggf. anpassen.
sudo systemctl edit --full openvpn@server.service
In die Sektion [Service] wird nun die Neustart Option eingetragen.
Restart=on-failure
Um die Änderung scharf zu schalten, müssen die Service Files zuerst neu eingelesen werden.
sudo systemctl daemon-reload
Danach wird der betroffene Dienst neu gestartet.
sudo systemctl restart openvpn@server.service
Ab jetzt werden die angepassten Dienste im Fehlerfall automatisch neu gestartet.
Fazit:
Es lohnt sich auf jeden Fall, ein klein wenig Arbeit in die Systempflege zu investieren, um einen möglichst reibungslosen Dauereinsatz zu gewährleisten. Natürlich gibt es noch diverse andere Möglichkeiten, die Systeme zu optimieren. Dies kann je nach Anforderung jedoch sehr stark variieren. Für Fragen und Anregungen würde ich mich sehr über einen Kommentar freuen.