Ad-hoc Disaster Recovery. Kann man machen, muss man nicht
Ich hatte eine ausführliche Anleitung, wie ich meinen Server nach einem Totalausfall wiederherstelle. Geschrieben hat sie ein KI-Agent, getestet hatte ich sie nie. An einem Vormittag wurde sie unfreiwillig ernst, und drei Stellen darin hielten nicht.
Im Oktober 1999 sprang Jan Davis vom El Capitan im Yosemite-Tal und bekam ihren Fallschirm nicht auf. Sie war eine erfahrene BASE-Jumperin, und der Sprung war eine Vorführung, die zeigen sollte, dass sich so etwas sicher machen lässt. Sie sprang mit geliehener Ausrüstung statt mit ihrer eigenen, und der Griff, der den Schirm auslöst, war daran anders angebracht als gewohnt. Ihre Hand suchte ihn dort, wo er bei ihrer eigenen Ausrüstung gewesen wäre. Dort war er nicht.
Ich bin diese Woche auch mit einer Ausrüstung gesprungen, die ich nie im Ernst benutzt hatte. Bei mir war es kein Fallschirm, sondern eine Anleitung.
Für den Fall, dass mein Homelab-Server komplett stirbt, habe ich eine Wiederherstellungs-Anleitung. Sie beschreibt Schritt für Schritt, wie ich aus Backups und ein paar Schlüsseln alles wieder aufbaue. Ein Agent hat sie für mich über Monate gepflegt, sie ist lang und gründlich, und ich war ein bisschen stolz auf sie und dass ich sie überhaupt habe. In meiner Karriere habe ich so manches enterprise-level Projekt gesehen, das so etwas nicht hat. Benutzt hatte ich sie nie. Man springt nicht zum Test, dafür ist der Sprung zu teuer. Man springt, wenn einen etwas schubst.
An diesem Dienstag hat mich etwas geschubst. Ich musste den Cluster ohnehin neu aufbauen, und da lag es nahe, die ganze Anleitung gleich einmal durchzugehen.
Dreimal habe ich meine Reißleine nicht finden können.
Die Warnung, die der Agent geschrieben hatte
In einer Nebendatei zur Anleitung steht eine Warnung: dass eine bestimmte Datenbank beim Wiederherstellen einen Sonderweg braucht. Man darf ihr Laufwerk nicht einfach wieder anklemmen wie die anderen, sonst legt der Verwalter eine frische, leere Struktur darüber. Geschrieben hat die Warnung nicht ich, sondern der Agent, dem ich den Aufbau überlassen habe. Er war beim Bauen darauf gestoßen. Ich hatte sie gelesen und genickt.
Beim echten Durchgang hat der Agent sechs Laufwerke angeklemmt, alle gleich, im selben Handgriff, und ich habe ihn gelassen. Fünf davon war das richtig. Beim sechsten stand die Warnung daneben, seine eigene, in einer Datei, die ich nicht im Blick hatte. Der Verwalter hat die frische Struktur daraufgelegt, und vierzehn Datenbanken waren leer. Die Warnung existierte, sie war korrekt, und sie hat nichts verhindert, weil sie Fließtext in einer Datei war und kein Widerstand an der Stelle, an der der Fehler passierte.
Das Kommando, das grün log
Der nächste Schritt der Anleitung war das Zurückspielen aus dem Backup, mit einem Kommando, das genau so seit Monaten dort stand. Ich habe es ausgeführt. Es lief durch und meldete für jede Datenbank null Fehler.
Es war trotzdem falsch. Das Kommando spielte die Daten so ein, dass hinterher alles dem Administrator gehörte statt den einzelnen Apps. Eine App, die beim Start ihre eigenen Tabellen migriert, stürzte deshalb sofort ab. Die richtige Fassung des Kommandos war eine Zeile länger und stand nirgends in meiner Anleitung, weil ich sie bis zu diesem Vormittag selbst nicht kannte. Meine Doku hat mich also nicht nur nicht gerettet, sie hat mich präzise in den Fehler geführt und dann grün gemeldet.
Die Fallen, die man nur beim Kaltstart sieht
Die dritte Sorte Fehler konnte in der Anleitung gar nicht stehen, weil ich sie nie hätte sehen können. Ein frisch aufgebauter Cluster stolpert über Dinge, die auf einem laufenden nie auftreten. Zwei Bausteine warteten wechselseitig aufeinander, jeder hielt den anderen auf, und keiner kam hoch. Auf meinem alten, gewachsenen Cluster gab es dieses Problem nie, weil die Teile, auf die gewartet wurde, schon lange da waren. Erst der Kaltstart hat es sichtbar gemacht.
Das ist der Kern der Sache. Eine Wiederherstellungs-Anleitung wird an genau der Situation geprüft, die es beim Schreiben nicht gibt. Ich habe sie auf einem gesunden System verfasst, an dem alles vorhanden war, und jeder Satz stimmte in dieser Welt. Die Anleitung ist aber für die andere Welt gedacht, in der nichts vorhanden ist, und dort galten andere Regeln, die ich vom Schreibtisch aus nicht sehen konnte.
Was geblieben ist
Am Abend lief der Cluster wieder, mit einem Datenverlust von achteinhalb Stunden, den ich mir mit der falsch angeklemmten Datenbank eingehandelt hatte. Und ich hatte eine Anleitung, die zum ersten Mal ehrlich war, weil sie einmal unter Last gestanden hatte.
Beim Nachbessern habe ich die Warnung von oben nicht fetter geschrieben. Ich habe das gefährliche Laufwerk aus der Datei gelöscht, die man beim Wiederherstellen abarbeitet. Jetzt kann ich es gar nicht mehr versehentlich mit anklemmen. Ein Satz «tu das nicht» ist schwächer als eine Datei, in der das Falsche schlicht nicht mehr steht. Das ist der Unterschied zwischen einer Anleitung, die man gelesen hat, und einer, die man einmal gebraucht hat.
Der einzige ehrliche Notfalltest ist der, den man nicht geplant hat. Meiner ging gut aus. Der Cluster lief am Abend wieder, die verlorenen achteinhalb Stunden konnte ich verschmerzen, und die Anleitung hat zum ersten Mal wirklich gehalten. Ich bin in mein Sofa gefallen.
Was den Unterschied gemacht hat, war nicht meine Vorbereitung. Meine Ausrüstung war so ungetestet wie die von Jan Davis, ich habe an einer entscheidenden Stelle genauso danebengegriffen, und dass ich trotzdem weich gelandet bin, verdanke ich dem Umstand, dass unter mir ein Sofa stand und kein Talboden. Sie hatte weniger Glück als ich. Das ist der ganze Unterschied, und es ist keiner, auf den ich stolz sein darf.