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
Antworten:
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-
/proc
Dateisystem in ein Zieldateisystem/proc
ist zum Scheitern verurteilt.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.
quelle
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 .
quelle
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.
quelle
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.
quelle