サーバー間で既存の LXD インスタンスを移動するには#
ある LXD サーバーから別のサーバーへインスタンスを移動するには lxc move コマンドを使います。
lxc move [<source_remote>:]<source_instance_name> <target_remote>:[<target_instance_name>]
注釈
コンテナを移動する際にはまず停止する必要があります。 詳細は コンテナのライブマイグレーション を参照してください。
仮想マシンを移動する際は、仮想マシンのライブマイグレーション を有効にするか、まず仮想マシンを停止する必要があります。
移動元のリモートがデフォルトのリモートの場合は省略可能で、移動先でも同じインスタンス名を使用する場合は移動先インスタンス名は省略できます。
インスタンスを特定のクラスタメンバーに移動したい場合は、--target フラグを指定してください。
この場合、移動元と移動先のリモートは指定を省略してください。
ネットワークのセットアップに応じて、--mode フラグを追加して転送モードを選択できます。
pull(デフォルト)移動先のサーバーに、移動元のサーバーへ接続させ該当のインスタンスをプルするように指示します。
push移動元のサーバーに、移動先のサーバーへ接続させインスタンスをプッシュするように指示します。
relayクライアントに移動元と移動先の両方に接続させデータをクライアント経由で転送するよう指示します。
移動先のサーバー上でインスタンスを動かすように設定を調整する必要がある場合、(--config, --device, --storage, --target-project を使用して) 設定を直接指定するか、(--no-profiles か --profile を使って) プロファイルを経由して指定できます。全ての利用可能なフラグについては lxc move --help を参照してください。
ライブマイグレーション#
ライブマイグレーションとはインスタンスの稼働中にマイグレートするという意味です。 仮想マシンではフルにサポートされています。 コンテナでは限定的にサポートされています。
仮想マシンのライブマイグレーション#
仮想マシンは稼働したまま、つまり一切のダウンタイムなしで、別のサーバーに移動できます。
ライブマイグレーションを可能にするには、ステートフルマイグレーションのサポートを有効にする必要があります。 そのためには、以下の設定を確認してください。
インスタンスの
migration.statefulをtrueに設定する。仮想マシンのルートディスクデバイスの
size.stateを少なくとも仮想マシンのlimits.memory設定のサイズに設定する。
コンテナのライブマイグレーション#
コンテナについては CRIU を使用したライブマイグレーションが限定的にサポートされています。
しかし、広範囲に及ぶカーネルへの依存のため、非常にベーシックなコンテナ (ネットワークデバイスなしの非 systemd コンテナ) のみが安定してマイグレートできます。
ほとんどの実世界でのシナリオでは、コンテナを停止、移動してその後起動するのが良いです。
コンテナのライブマイグレーションを使用したい場合、マイグレーション元と先の両方のサーバーで CRIU を有効にする必要があります。 snap をお使いの場合、以下のコマンドを使用して CRIU を有効にしてください。
snap set lxd criu.enable=true
systemctl reload snap.lxd.daemon
それ以外の場合、両方のシステムに CRIU がインストールされていることを確認してください。
コンテナのメモリ転送を最適化するには migration.incremental.memory プロパティを true に設定して CRIU の事前コピー機能を使用してください。
この設定では LXD はコンテナの一連のメモリダンプを実行するよう CRIU に指示します。
それぞれのダンプの後、 LXD はメモリダンプを指定されたリモートに送信します。
理想的なシナリオでは、各メモリダンプを前のメモリダンプとの差分にまで減らし、それによりすでに同期されたメモリの割合を増やします。
同期されたメモリの割合が migration.incremental.memory.goal で設定した閾値と等しいか超えた場合、あるいは migration.incremental.memory.iterations で指定された許容される繰り返し回数の最大値に達した場合、 LXD は CRIU に最終的なメモリダンプを実行し、転送するように要求します。