Die Entwickler des Projekts Multikernel, das es ermöglicht, mehrere unabhängige Instanzen des Kernels ohne Hypervisor und Virtualisierung auf einem physischen Computer auszuführen, haben das Tool kmorph vorgestellt. Dieses implementiert Mittel zur schnellen Wiederherstellung nach einem Kernel-Absturz oder zur Kernel-Ersetzung im Live-Betrieb ohne vollständigen Neustart. Das Projekt wird von Cong Wang geleitet, der das Traffic Control (TC)Subsystem im Kernel betreut. Die Methode für den schnellen Neustart basiert auf dem Vorab-Laden eines Ersatzkerns im Speicher, der das aktive Arbeitskernel im Falle eines Ausfalls oder zur Notwendigkeit der Aktualisierung des Kernels auf eine neue Version ersetzt.
Der vorgeschlagene Ansatz ermöglicht eine vollständige Neuladung zu vermeiden und die Betriebsaufnahme nahezu sofort zu ermöglichen, wodurch die Ausfallzeit minimiert wird. Derzeit benötigen vollständige Neustarts bei einem Kernel-Absturz große Server mehrere Minuten aufgrund der langwierigen Initialisierungsprozesse der Hardware, dem Laden der Systemumgebung und dem Speichern des Kernel-Speicherabbilds über den Mechanismus kdump. Im Wesentlichen werden bei der Verwendung von kdump zwei Neustarts des Kernels durchgeführt – zunächst wird über kexec eine separate Kerninstanz geladen, um das Speicherabbild zu sichern, danach folgt das Laden des Arbeitskernels und der Start der Systemdienste.
Bei der Anwendung von kmorph in Verbindung mit einem einzelnen CPU-Kern wird ein Ersatzkernel von Linux und eine minimale Systemumgebung vorab in den Speicher geladen, die den Zustand des aktiven Kernels überwacht. Im Falle eines Hängens oder eines Panic-Zustands des aktiven Kernels übernimmt die Ersatzumgebung die Kontrolle, speichert das Speicherabbild des fehlerhaften Kernels, wechselt die Prozessorkerne, den Speicher, die Geräte, die Netzwerkkonfiguration und das Dateisystem.
Der Wechsel wird mit Hilfe von zwei Programmen koordiniert: kmorph – läuft in der aktiven Umgebung, erstellt den Inhalt der Backup-Umgebung und synchronisiert den Netzwerkstatus darin; kmorphd – läuft in der Backup-Umgebung und überwacht den Status der aktiven Umgebung. Neben dem Wechsel im Falle eines Ausfalls besteht die Möglichkeit, kmorph für die Aktualisierung des Kernels ohne herkömmlichen Neustart zu verwenden. Um die Wiederherstellung in der Backup-Umgebung zu beschleunigen, können zusätzlich zum Kernel und einer minimalen Menge an Systemkomponenten im Bereitschaftsmodus Standarddienste wie nginx gestartet werden. In diesem Fall wird der nginx-Dienst zum Zeitpunkt der Aktivierung der Backup-Umgebung bereits in den Speicher geladen und beginnt sofort mit der Bearbeitung von Anfragen, nachdem auf die neue Umgebung der Netzwerkkarte umgeschaltet, die Netzwerk-Konfiguration aktiviert und das Root-Dateisystem gewechselt wurde.
In durchgeführten Tests stellt der Server mit nginx mithilfe von kmorph den Betrieb etwa 2 Sekunden nach einem Kernel-Ausfall wieder her, plant jedoch für die Zukunft, einen sofortigen Wechsel nahezu unsichtbar für die verbundenen Kunden zu erreichen. Derzeit unterstützt kmorph die Architekturen x86_64 und ARM64, und es wird auch an der Unterstützung von RISC-V gearbeitet. Die Integration von kmorph in Linux-Distributionen erfolgt analog zur Unterstützung von kdump, über die Standardwerkzeuge dracut, initramfs-tools, kernel-install und den Systemdienst systemd.
Die Kernel enthalten bereits Mechanismen wie Kexec HandOver (KHO) und Live Update Orchestrator (LUO), die es ermöglichen, einen neuen Kernel aus dem alten ohne Verlust des Systemstatus und ohne Stopp der Gerätebetriebs zu starten. Diese können jedoch im Falle eines Kernel-Ausfalls nicht angewendet werden, da sie zur Erhaltung des Status des laufenden Kernels erforderlich sind. KHO und LUO hinken kmorph auch in Bezug auf die Wechselgeschwindigkeit hinterher, da beim kmorph der neue Kernel bereits im Speicher ist, während KHO und LUO einen Neustart des Kernels über kexec erfordern.
Quelle: opennet.ru
