Ist es möglich, einen laufenden Prozess zwischen Maschinen zu kopieren?

8

Nach meinem besten Verständnis sind alle Linux-Prozesse tatsächlich Dateien. Ist es möglich, einen laufenden Prozess von einem Computer auf einen anderen zu kopieren?

Beispiel: Kopieren Sie einen laufenden Tomcat-Server von einem Computer auf einen anderen, ohne den Server neu starten zu müssen

aviad m
quelle
Sie benötigen Clustering-Software. Ich weiß nichts über Namen oder was jeder tut, aber ich bin mir bewusst, dass es einen gibt, um Prozesse zu anderen Maschinen zu teleportieren.
Strg-Alt-Delor
Eigentlich keine Dateien. Dateien sind keine Natur.
Zustände
Insbesondere sind Prozesse unter Linux im Gegensatz zu anderen Linux-Zuständen die am wenigsten dateiartige Sache. Sie können einen fd nicht an einen Prozess halten und davon ausgehen, dass der Prozess existiert. Dies ist die pdfork-Funktionalität von FreeBSD, die unter Linux nicht existiert.
31 薯条 德里克

Antworten:

8

Nach meinem besten Verständnis sind alle Linux-Prozesse tatsächlich Dateien

Sie sollten die Metapher nicht zu wörtlich nehmen. Auf Linux-Prozesse kann zwar über ein Pseudo-Dateisystem zum Debuggen, Überwachen und Analysieren zugegriffen werden, aber Prozesse sind mehr als nur diese Dateien, und das "Kopieren" von einem Quell-Host- /procDateisystem in ein Zieldateisystem /procist zum Scheitern verurteilt.

Ist es möglich, einen laufenden Prozess zwischen Maschinen zu kopieren?

Eines der schwerwiegenden Probleme beim Verschieben eines laufenden Prozesses zwischen Hosts ist die Behandlung der von diesem Prozess verwendeten offenen Dateideskriptoren. Wenn ein Prozess eine Datei liest oder schreibt, muss genau diese Datei (oder ein genauer Klon) auf dem Zielhost verfügbar sein. Dateideskriptoren in Bezug auf Sockets wären schwierig zu verarbeiten, da sich die IP-Adresse, an die sie gebunden sind, wahrscheinlich von einem Host zum anderen ändert. Prozesse, die Speichersegmente mit anderen teilen, werden nach einer Migration nicht mehr ausgeführt. PID-Konflikte können auch auftreten, wenn ein laufender Prozess dieselbe PID hat wie der eingehende. Einer von ihnen muss geändert werden. Die Eltern-Kind-Beziehung geht verloren, und ich habe gerade die potenziellen Probleme gekratzt.

Trotz dieser Probleme gibt es technische Lösungen, die diese als " Application Checkpointing " bezeichnete Funktionalität wie DMTCP und CRIU bereitstellen . Dies ähnelt dem, was mit Hypervisoren wie VMWare, VirtualBox, Oracle VM und anderen verwendet wird, wenn sie Live-Migration / Teleportation von virtuellen Maschinen durchführen . Bei virtuellen Maschinen ist der Job tatsächlich "einfacher", da das gesamte Betriebssystem verschoben wird, einschließlich der Dateideskriptoren, der Dateisysteme, des Speichers, des Netzwerks und anderer Geräte usw.

jlliagre
quelle
Ich habe diese Frage eher als Übung gestellt als als etwas, das auf einem realen System ausprobiert werden sollte. Beim Betrachten von Prozess- "Dateien" stellte ich fest, dass ein Prozess zu viele Abhängigkeiten aufweist, um eine Datei einfach zu kopieren und auf einem anderen Computer zum Laufen zu bringen, aber es tut nie weh, zu fragen und möglicherweise eine andere Sicht auf die Dinge zu bekommen. Danke für deine Antwort.
Aviad m
Was ist mit Docker? . edit fand diese criu.org/Docker
phil294
@Blauhirn In der Tat. Ich erwähnte CRIU mit einem Link, in dem die Integration mit OpenVZ, LXC / LXD und Docker erwähnt wird.
Jlliagre
2

Nein, es ist nicht möglich, einen Prozess (dh ein laufendes Programm) von einem Unix-Computer auf einen anderen zu verschieben.

Einige Dienste wie Webdienste, Datenbankdienste oder Router bieten Redundanzoptionen wie Failover und / oder Lastausgleich. Dies bedeutet, dass mehrere Kopien des Dienstes auf mehreren Computern ausgeführt werden. Wenn einer ausfällt, übernimmt ein anderer den Dienst oder sie teilen sich die Last der Bereitstellung des Dienstes und replizieren möglicherweise Datenbanken / Status untereinander, um auf dem neuesten Stand zu bleiben.

Diese Arten von Diensten würden von einem Computer auf einen anderen "verschoben", während die Prozesse, die den Dienst bereitstellen, nicht verschoben werden.

Dies ist jedoch eine Funktion des jeweiligen Dienstes und nicht von Unix.

Weitere Informationen finden Sie möglicherweise im ServerFault-Forum .

Kusalananda
quelle
2

Ja es ist möglich. MOSIX ( http://www.mosix.org ) verarbeitet die Migration zwischen Linux-Computern (wie im Wikipedia-Link in der Antwort von @jlliagre erwähnt), ist Open Source und erfordert keinen Kernel-Patch. Es ist für HPC-Anwendungen und wahrscheinlich nicht das, was Sie wollen, aber ich dachte, ich würde es für die Nachwelt erwähnen.

jamesc44
quelle
0

Nein, ab sofort ist es nicht möglich. wenn der Prozess unter einen Dienst fällt. Dann kann eine Übertragung von Service zu Service-Prozess möglich sein. Dies erforderte jedoch Änderungen auf Betriebssystemebene.

user253394
quelle