サーバ間で既存の 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 に最終的なメモリダンプを実行し、転送するように要求します。