2 つの VM が同じマシン上でホストされています。これらを VM1 と VM2 と名付けます。両方の VM はrunC
サーバー アプリケーションを実行するコンテナーをホストしており、クライアントはホスト マシン上で直接実行され、VM1 のコンテナーで実行されているサービスに接続されています。
VM1 上のコンテナを閉じると、クライアントが VM2 上で実行されているコンテナに接続されるようなフェイルオーバー サービスを構築したいと考えています。
私はフローティングIPを実装してテストしました。キープアライブとVRRPで示唆されているようにこれリンクですが、これは VM 全体に障害が発生した場合にのみ機能します。VM1 上のコンテナーに障害が発生した場合、コンテナーのフォールト トレランス サービスを実装する必要があります。VM1 が稼働している場合でも、つまりコンテナーに障害が発生しても、そのコンテナーをホストしている VM が稼働している場合でも、クライアントは VM2 で実行されているレプリカに接続する必要があります。
ここでの制限は、単一障害点になる可能性のあるロード バランサ/HAproxy サービスを使用しないことです。
これを実現するにはどうしたらよいか、何かアイデアはありますか? それとも、これは不可能なのでしょうか?
編集: (コメントで提案されているように、混乱を避けるために詳細を追加します。)VM2上のコンテナは、プライマリコンテナ、つまりVM1上で実行されているコンテナが起動された時点から実行されていません。と呼ばれるコンテナチェックポイント/リストアユーティリティがありcriu
、それを見ることができます。ここそしてこここのユーティリティを使用すると、まずそのコンテナのチェックポイントを作成し、その状態をVM2に移行して復元することで、VM1のコンテナがVM2に移行されます。ただし、クライアントがVM2で実行されているコンテナに接続できるようにする必要があります。これまでは、ネットワーク名前空間でコンテナを実行し、VM1のインターフェイスからルートを追加していました。これにより、前述のようにVM1自体に障害が発生した場合などのハードウェア障害を防ぐことができます。キープアライブとVRRPしかし、今必要なのは、コンテナの状態が VM2 側に移行され、コンテナがダウンしたが VM1 は起動しており、そのコンテナの移行された状態が VM2 で復元された場合、クライアントが VM2 で現在実行中のコンテナに接続されるようにするにはどうすればよいかということです。このシナリオをシミュレートする必要があります。