私が知っている限り、すべてのLinuxプロセスは実際にはファイルです。実行中のプロセスをあるコンピュータから別のコンピュータにコピーできますか?
例:サーバーを再起動せずに、実行中のTomcatサーバーをあるコンピュータから別のコンピュータにコピーします。
答え1
私が知っている限り、すべてのLinuxプロセスは実際にはファイルです。
このたとえ話を文字通り受け入れてはいけません。 Linuxプロセスは実際にはデバッグ、監視、分析の目的で擬似ファイルシステムを介してアクセスできますが、プロセスは単純なファイル以上であり、ソースホストファイルシステムからターゲットファイルシステム/proc
に「コピー」されます/proc
。
マシン間で実行中のプロセスをコピーできますか?
ホスト間で実行中のプロセスを移動するときに発生する深刻な問題の1つは、プロセスが使用している開いているファイル記述子をどのように処理するかです。プロセスがファイルを読み書きする場合は、そのファイル(または正確なレプリカ)をターゲットホストで使用可能にする必要があります。ソケットに関連するファイル記述子は、バインドされたIPアドレスがホストごとに変更される可能性があるため、処理が難しいです。他のプロセスとメモリセグメントを共有するプロセスは、移行後にこのタスクの実行を停止します。 PID 衝突も発生する可能性があります。実行中のプロセスに着信プロセスと同じpidがある場合は、そのうちの1つを変更する必要があります。親子関係がなくなり、根本的な問題を発見しただけです。
これらの問題にもかかわらず、この機能を提供する技術ソリューションがあります。と呼ばれる」アプリケーションチェックポイント「いいねDMTCPそしてクリウ。これは、VMWare、VirtualBox、Oracle VMなどのハイパーバイザーが仮想マシンを作成するときに使用するのと似ています。リアルタイム移行/吹く。仮想マシンを使用すると、ファイルディスクリプタ、ファイルシステム、メモリ、ネットワーク、その他のデバイスなど、オペレーティングシステム全体が移動するため、操作は実際には「より簡単です」。
答え2
はい、可能です。モシックス(http://www.mosix.org)は@jlliagreの回答のWikipediaリンクで説明されているように、Linuxシステム間のプロセス移行を行い、オープンソースであり、カーネルパッチは必要ありません。これはHPCアプリケーションのためのものであり、望むものではないかもしれませんが、子孫のために言及したいと思いました。
答え3
いいえ、移動できません。プロセス(つまり、実行中のプログラム)1つのUnixシステムから別のシステムへ。
一部提供するネットワークサービス、データベースサービス、ルーターなどは、フェイルオーバーやロードバランシングなどの冗長オプションを提供します。つまり、複数のシステムで実行されているサービスの複数のコピーがあり、1つのシステムが失敗した場合は、別のシステムが代替またはサービス提供の負荷を共有して、最新の状態を維持するためにデータベース/状態を互いに複製できます。
このタイプのサービスは、サービスの移動を提供するプロセスなしに、あるシステムから別のシステムに「移動」します。
ただし、これはUnixではなく特定のサービスの機能です。
以下の詳細情報を見つけることができます。サーバー障害フォーラム。
答え4
いいえ、まだ不可能です。プロセスがサービスに属する場合。これにより、サービス間のプロセス移行が可能になります。ただし、これにはオペレーティングシステムレベルの変更が必要です。