Zum Inhalt springen

Betrieb & Selbstheilung

Der Server ist auf Absturzsicherheit in drei Ebenen ausgelegt — und darauf, dass ein anhaltend ungesunder Prozess sich selbst beendet, damit der Supervisor ihn frisch neu startet.

  • Ein Panic in einem HTTP-Handler wird abgefangen: Die Anfrage endet als 500, der Stacktrace steht im Log, der Prozess läuft weiter.
  • Ein Panic in einem Hintergrund-Job (Propagation, Erinnerungen, Zertifikate, …) wird zum gewöhnlichen Fehler: Der Job bekommt den normalen Versuchs-Backoff (30 s bis 30 min) und läuft später erneut — ein kaputter Job kann weder heißlaufen noch den Prozess reißen.
  • Der Zustand liegt Event-sourced in der Datenbank: Auch ein harter Absturz verliert keine bestätigten Änderungen; Projektionen und Reaktoren setzen nach dem Start am Checkpoint wieder auf.

Zwei öffentliche Endpunkte (bewusst ohne Anmeldung — sie verraten nur oben/unten) für Supervisoren und Load Balancer:

EndpunktBedeutungAntwort
GET /healthzProzess bedient Anfragen (Liveness)200 ok
GET /readyzDatenbank antwortet (Readiness)200 oder 503 mit Fehlertext

Ebene 3: Watchdog — Selbst-Restart bei Instabilität

Abschnitt betitelt „Ebene 3: Watchdog — Selbst-Restart bei Instabilität“

Ein eingebauter Watchdog prüft den Prozess periodisch von innen: Datenbank-Ping, optional Heap- und Goroutine-Grenzen. Einzelne Aussetzer werden nur geloggt; erst mehrere Fehlschläge in Folge beenden den Prozess kontrolliert mit Exit-Code 2 — der Supervisor startet ihn neu (Crash-only-Muster: ein frischer Prozess ist der verlässlichste Weg zurück in einen bekannten Zustand).

VariableBedeutungDefault
DNSE_WATCHDOGWatchdog aktivon
DNSE_WATCHDOG_INTERVALPrüfintervall30s
DNSE_WATCHDOG_FAILSFehlschläge in Folge bis zum Neustart4
DNSE_WATCHDOG_HEAP_MBGo-Heap-Obergrenze in MB (0 = aus)0
DNSE_WATCHDOG_GOROUTINESGoroutine-Obergrenze (0 = aus)0
[Unit]
Description=DNS-Editor
After=network-online.target
[Service]
ExecStart=/usr/local/bin/dnseditor
EnvironmentFile=/etc/dnseditor/env
Restart=always
RestartSec=3
# optional: Neustart-Sturm bremsen
StartLimitIntervalSec=120
StartLimitBurst=10
[Install]
WantedBy=multi-user.target
services:
dnseditor:
image: <euer-image>
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8422/readyz"]
interval: 30s
timeout: 5s
retries: 3
Terminal-Fenster
curl -s http://127.0.0.1:8422/healthz
curl -s http://127.0.0.1:8422/readyz

Watchdog-Meldungen erscheinen im Log als watchdog: self-check failed (Warnung je Fehlschlag) und watchdog: process unhealthy - exiting for supervisor restart unmittelbar vor dem Selbst-Neustart.

Bei deutscher Systemsprache heissen sie Watchdog: Selbstpruefung fehlgeschlagen und Watchdog: Prozess ungesund - Beenden fuer den Neustart durch den Supervisor. Welche Sprache greift und warum die deutschen Texte ohne Umlaute auskommen, steht unter Installation als Paket.

Mit gesetztem DNSE_BACKUP_DIR schreibt der Dienst jede Nacht einen vollständigen logischen Export der Organisation (JSON Lines) in dieses Verzeichnis — die Wiederherstellungspunkte. Punkte älter als 35 Tage werden automatisch aufgeräumt. Ohne die Variable ist die Sicherung aus, und der Admin-Reiter erscheint nicht.

Im Admin-Panel unter Sicherung lassen sich Punkte einsehen, mit Jetzt sichern außer der Reihe erzeugen (etwa vor riskanten Änderungen) und herunterladen. Eine Wiederherstellung wird dort mit dem Bestätigungswort RESTORE angefragt; unmittelbar vorher entsteht automatisch ein Sicherheits-Export des Ist-Zustands.

Die Wiederherstellung führt aus: Die Organisation wird kurz angehalten (Schreibzugriffe abgewiesen), der gewählte Punkt ersetzt den Bestand vollständig — Geheimnisse werden dabei mit dem aktuellen Schlüssel neu verschlüsselt, abgeleitete Sichten aus den Ereignissen neu aufgebaut — und danach läuft die Organisation nahtlos weiter. Bricht eine Wiederherstellung ab, bleibt die Organisation erkennbar unvollständig (Schreibzugriffe scheitern mit klarer Meldung) statt still halb gefüllt; eine wiederholte Anfrage räumt auf und setzt neu auf — der Cooldown tritt für diesen Reparaturfall beiseite. Punkte von einem anderen Schemastand werden mit Begründung abgelehnt, nie still eingespielt.

Der Admin-Bereich zeigt unten links die laufende Version — und einen Hinweis, sobald der Paketserver repo.techeve.de eine neuere Version der eigenen Edition führt (Paket dnseditor bzw. dnseditor-ee in der Suite stable). Die Abfrage liest den ohnehin öffentlichen APT-Index — ein anonymer GET, höchstens alle sechs Stunden; es fließen keine Daten über die Installation hinaus. Ist der Server nicht erreichbar — etwa in abgeschotteten Netzen — bleibt der Hinweis einfach aus.

DNSE_UPDATE_FEED übersteuert die Index-URL (etwa für eine andere Suite); off schaltet die Abfrage ganz ab.