Migration

是否可以在機器之間複製正在執行的程序?

  • July 31, 2019

據我了解,所有 linux 程序實際上都是文件,是否可以將正在執行的程序從一台機器複製到另一台機器?

例如 - 將正在執行的 tomcat 伺服器從一台機器複製到另一台機器,而無需重新啟動伺服器

據我了解,所有 linux 程序實際上都是文件

你不應該把這個比喻看得太字面意思。Linux 程序確實可以通過偽文件系統訪問以進行調試、監控和分析,但程序不僅僅是這些文件,將它們從源主機/proc文件系統“複製”到目標/proc文件系統是注定要失敗的。

是否可以在機器之間複製正在執行的程序?

在主機之間移動正在執行的程序的一個嚴重問題是如何處理該程序正在使用的打開文件描述符。如果程序正在讀取或寫入文件,則該文件(或精確複製)必須在目標主機上可用。與套接字相關的文件描述符將很難處理,因為它們綁定的 IP 地址可能會從一個主機更改為另一台主機。與其他程序共享記憶體段的程序在遷移後將停止這樣做。PID 衝突也可能發生,如果正在執行的程序具有與傳入程序相同的 pid,則需要更改其中之一。親子關係會失去,我剛剛解決了潛在的問題。

儘管存在這些問題,但仍有一些技術解決方案提供稱為“應用程序檢查點”的功能,例如DMTCPCRIU。這類似於 VMWare、VirtualBox、Oracle VM 等管理程序在進行虛擬機實時遷移/遠端傳輸時使用的管理程序。使用虛擬機,隨著整個作業系統的移動,包括文件描述符、文件系統、記憶體、網路和其他設備等,這項工作實際上“更簡單”了。

引用自:https://unix.stackexchange.com/questions/335946