Dieses Blog hat in den vergangenen zwei Tagen massive Ausfälle gehabt. Von Dienstag vormittag bis Mittwoch nachmittag war der Rechner nur sporadisch online. Und nicht nur dieser Rechner, sondern alle virtuellen und die physikalische Maschine meines Servers. Und das kam so:
Am Dienstag morgen hat die automatische Update-Routine meiner Ubuntu-18.04-Server mal wieder neue Updates installiert. Ich habe das grundsätzlich auf allen Rechnern eingeschaltet und im Vollautomatik-Betrieb: Installiere und wenn nötig, reboote. Diese Reboots finden dann auf Grund von Zusammenhängen, die ich bis heute nicht vollständig durchdrungen habe, erst am darauffolgenden Morgen statt.
Nun habe ich aber an diesem Morgen bereits am Rechner gesessen und als ich das gesehen habe, dachte ich mir: „Ok, ich löse den Reboot jetzt einfach händisch aus, dann haben wir es hinter uns.” Aber ach!
Nach dem Reboot beginnt dann das Chaos. Rechner da – Rechner weg. Ich bekomme die E‑Mail vom Monitoring-System. Einloggen nicht möglich. Hardware-Reset auf der Hetzner-Konsole. Rechner da. Puh. Rechner wieder weg. Mist. Hardware-Reset auf der Hetzner-Konsole. Rechner da. Hm. Rechner wieder weg. Riesen-Mist.
E‑Mail an Hetzner: „Was ist da los?” Antwort: „Da ist eine Kernel Panic. Wir haben eine Remote-Konsole angeschlossen.” Ich mache also etwas, das ich bisher stets vermieden habe: Ich schaue meinem Mietserver auf die Konsole.
Die ist komplett vollgeschrieben mit einer Kernel Panic des Linux-Kernels. Das hatte ich so auch noch nicht. Die Kernel Panic und ich schauen uns eine Weile gegenseitig an. Schließlich löse ich einen Reset des Rechners aus. Genau so wie die beiden vorigen Male, bloß dass ich diesmal zuschauen kann.
Die Kiste bootet… Fährt hoch… Konsole… Virtuelle Maschinen… Ist da… Rrrrrrums! Kernel Panic. Noch ein Anlauf (man glaubt das ja erstmal gar nicht). Dasselbe Spielchen.
Ich gehe ins BIOS. Und traue meinen Augen kaum: Dieser kreuzbrave, mit Enterprise-Festplatten ausgestattete Server-Oldie aus der Gebraucht-Börse ist mit Hilfe des „Overclocking-Wizards” im Intel-BIOS auf „1,25-faches Overclocking” eingestellt! Ich fasse es nicht! Umgehend beende ich diesen Spuk und denke mir: „Hoffentlich hat die Hardware nichts abgekriegt.” Der Rechner hatte vor einigen Monaten massive thermische Probleme, die erst im zweiten Anlauf mit neuen Lüftern vollständig beseitigt waren. Ich beginne zu ahnen, was da das eigentliche Problem war…
Neuer Anlauf ohne Overclocking. Geht. Geht? Geht??? Nein, Crash. BIOS. Ich folge der Vermutung „Hardwareproblem durch thermische Alterung” und schalte das Hyperthreading des Core-i7-3000-Prozessors aus. Außerdem fahre ich unmittelbar nach dem Reboot alle virtuellen Maschinen wieder runter und deaktiviere das automatische Hochfahren.
Jetzt stellt sich eine gewisse Stabilität ein. Der Rechner läuft. Ohne die virtuellen Maschinen macht er aber nichts wirklich Hilfreiches. Nach zehn Minuten schalte ich den ersten der vier virtuellen Rechner wieder ein. Dann den zweiten. Nummer drei. Na? Ok, Nummer vier. Auf all den virtuellen Maschinen führe ich nach dem Reboot erstmal etwas größere Netzwerkoperationen aus – läuft alles durch.
Es ist Mittag. Ich gehe essen. Während ich unterwegs bin, kommt wieder eine Alarmmeldung aufs Handy: Server down.
Ich schildere die Vorfälle in einer längeren E‑Mail dem Hetzner-Support und äußere dabei die Vermutung, dass die sowieso schon angegriffene Hardware durch den Reboot am Morgen und die nachfolgende Hochlastphase bei Reinitialisieren der ganzen virtuellen Rechner und deren Services final einen weg bekommen hat und nicht mehr zuverlässig läuft.
Hetzner reagiert prompt – und tauscht den ganzen Rechner aus. Ich bin etwas perplex, aber der Erfolg scheint ihnen erstmal Recht zu geben: Der Rechner fährt stabil hoch und funktioniert. Ich bin glücklich. Vor lauter Freude übersehe ich aber ein lästiges Detail: Die neue Hardware hat eine neue MAC-Adresse. Die virtuelle Bridge arbeitet aber noch mit der alten Adresse, die auch „nach draußen” übermittelt wird. Und dadurch kommen keine IPv4-Pakete mehr an. Der Rechner ist recht weiträumig vom Internet abgeschnitten.
Bemerkt wird das – mal wieder – von den Überwachungsroutinen. Während die ganzen Checks auf IPv6-Basis nach und nach Entwarnung geben, kommt drei Stunden nach der letzten Warnung eine neue: „IPv4 immer noch nicht erreichbar”.
Ich setze mich also am Abend hin und konfiguriere das Netzwerk auf die neue MAC-Adresse. Damit ändert sich auch die IPv6-Adresse des physikalischen Hosts, SLAAC sei Dank. Nach dem Reboot ist die IPv4-Konntektivität wieder da…
…und leider auch die Stabilitätsprobleme. Während ich noch die letzte virtuelle Maschine hochfahre, sehe ich aus Augenwinkeln auf der mittlerweile wieder angeschlossenen KVM-Konsole… eine Kernel-Panic.
Das ist der Moment, in dem es mir zu bunt wird. Ich schreibe Hetzner, die neue Hardware würde auch rumspinnen. Sie sollen einen kompletten Hardwarecheck laufen lassen. Dann gehe ich ins Bett, mittlerweile ist es tief in der Nacht.
Morgens denke ich nach: Ich habe die ganze Zeit die Hardware in Verdacht. Der auffälligste zeitliche Zusammenhang ist aber, dass die Probleme unmittelbar nach dem Reboot nach den letzten Updates angefangen haben. Und was sagt Ockhams Rasiermesser? Es ist immer die einfachste Erklärung die richtige.
Was war denn eigentlich in diesem Update? Oh, ein neuer Kernel. Das ist irgendwie genau die Systemkomponente, die seither mit Panics unangenehm auffällt. Ein Schelm, wer Böses dabei denkt.
Mittlerweile ist es Mittwoch mittag. Die Ergebnisse des Hardwaretests sind da: Alles ok. Es wär’ ja auch zu schön gewesen…
Eine Beobachtung war ja, dass der Rechner ohne die virtuellen Maschinen wesentlich stabiler, eventuell sogar vollständig stabil, läuft. Ich fahre schnell die virtuellen Maschinen wieder runter und baue die Konfiguration des Bootloader Grub so um, dass nicht der gestern installierte neue Kernel 4.15.0 – 60 geladen wird, sondern der ältere 4.15.0 – 58.
Nachdem dieser Kernel auf der physikalischen Maschine läuft, fange ich an, die virtuellen Rechner wieder hochzufahren. Und siehe da: Jetzt ist das System wieder stabil! Keine Abstürze, keine Panics – alles ist so, wie es sein soll. Mit apt-get mark manual
sorge ich dafür, dass der 58er-Kernel keinesfalls durch automatische Updates entfernt werden wird. Und dann sehe ich meinem Rechner dabei zu, wie er einfach funktioniert.
Naja, und dann Mittwoch am späten Nachmittag finde ich die Erklärung für das alles: Im Ubuntu-Bugtracker findet sich ein Bugreport, der genau mein Problem beschreibt: Kernel Panic im Netzwerkcode und immer im Zusammenhang mit Docker-Instanzen. Nun habe ich kein Docker, sondern arbeite mit „echten” virtuellen Servern, aber dabei verwende ich genau wie Docker ein gebridgetes Netzwerk.
Langsam werden mir die Zusammenhänge klar: Der Bug wurde Dienstag morgen aktiv, nachdem ich den 60er-Kernel gebootet hatte. Innerhalb weniger Minuten Totalabsturz mit Kernel Panic – nicht gut. Immer wenn die virtuellen Maschinen abgeschaltet waren, lief der Rechner problemlos. Aber nicht etwa – wie von mir vermutet -, weil der Hauptprozessor dann eine ruhige Kugel schiebt, sondern weil der Bug im IPv4-Code nicht getriggert wird.
Nach dem Hardwaretausch am Dienstag mittag herrschte dann trügerische Ruhe, weil eben genau die IPv4-Netzwerkverbindungen inaktiv waren; offensichtlich gilt: Wo keine Pakete, da kein Absturz. In dem Moment, in dem ich das repariert hatte und IPv4 wieder ging, kamen auch sofort die Probleme zurück.
Mittlerweile ist Mittwoch Nacht. Der Rechner läuft, das Problem ist gelöst. Seine Ursache ist verstanden und bei Ubuntu arbeiten sie gerade an einem Bugfix. Ich muss nochmal an Ockham denken: Wenn ich am Dienstag vormittag einmal in Ruhe über die Abfolge der Ereignisse nachgedacht hätte, wäre ich vielleicht von selbst drauf gekommen, dass vor der Hardware der Verdacht erstmal auf die frisch installierte Software hätte fallen müssen. Es ist so viel naheliegender, dass ein Update schlicht ein kaputtes Programm aufspielt, als dass durch den Updateprozess irgendwelche obskuren unterstellten Hardwareprobleme auftreten.
Nun ist der Rechner jedenfalls wieder da. Und ich kann wieder ruhig schlafen. Am Ende war das Szenario vollständig verstanden und hat sich gar nicht als so unendlich schwierig zu meistern herausgestellt. Ich hätte aber auch gern drauf verzichtet.
Nachtrag, 2019-09-10: Mittlerweile gibt es einen aktualisierten Kernel 4.15.0 – 62, der wieder problemlos läuft.