12.6. コマンドラインインターフェイスを使用した仮想マシンの移行
仮想マシンの現在のホストが不安定な場合や使用できない場合や、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。次の手順では、このような移行のさまざまなシナリオの手順と例を示します。
前提条件
- 移行元ホストと移行先ホストはいずれも KVM ハイパーバイザーを使用します。
-
移行元ホストと移行先のホストは、ネットワーク経由で相互に通信できなければなりません。
ping
ユーティリティーを使用してこれを確認します。 移行先ホストで以下のポートが開いていることを確認します。
- ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
- ポート 16509 は、TLS を使用して宛先ホストに接続するために必要です。
- ポート 16514 は、TCP を使用して宛先ホストに接続するために必要です。
- ポート 49152-49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
- Red Hat が移行に対応できるようにするには、移行元ホストと移行先のホストが特定のオペレーティングシステムとマシンタイプを使用している必要があります。これを確認するには、Supported hosts for virtual machine migration を参照してください。
- 仮想マシンは、移行先ホストの CPU 機能と互換性がある必要があります。これを確認するには、仮想マシン移行のホスト CPU の互換性の確認 を参照してください。
移行する仮想マシンのディスクイメージに、ソースホストと宛先ホストの両方からアクセスできる。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。両方のホストのストレージアクセスを確保するには、次のいずれかに該当している必要があります。
- ストレージエリアネットワーク (SAN) 論理ユニット (LUN) を使用している。
- Ceph Storage クラスター を使用している。
-
仮想マシンのディスクイメージを宛先ホストにコピーし、仮想マシンを移行するときに
--copy-storage-all
パラメーターを使用する。または、ソース仮想マシンディスクと同じ形式とサイズの ディスクイメージを作成 した。 - ディスクイメージが別のネットワーク上の場所にある。このような仮想マシンの共有ストレージを設定する手順は、Sharing virtual machine disk images with other hosts を参照してください。
仮想マシンの実行中に移行する場合は、ネットワークの帯域幅が、仮想マシンがダーティーメモリーページを生成する速度を超える必要があります。
ライブマイグレーションを開始する前に仮想マシンのダーティーページ速度を取得するには、次の手順を実行します。
短期間、仮想マシンのダーティーページ生成速度を監視します。
# virsh domdirtyrate-calc example-VM 30
監視が終了したら、結果を取得します。
# virsh domstats example-VM --dirtyrate Domain: 'example-VM' dirtyrate.calc_status=2 dirtyrate.calc_start_time=200942 dirtyrate.calc_period=30 dirtyrate.megabytes_per_second=2
この例では、仮想マシンが 1 秒あたり 2MB のダーティーメモリーページを生成しています。帯域幅が 2MB/s 以下のネットワーク上でこのような仮想マシンをライブマイグレーションしようとすると、仮想マシンを一時停止したり、ワークロードを低くしたりしないと、ライブマイグレーションが進行しません。
ライブマイグレーションが正常に終了するように、Red Hat では、ネットワークの帯域幅が仮想マシンのダーティーページの生成速度を大幅に上回ることを推奨しています。
注記calc_period
オプションの値は、ワークロードとダーティーページ速度により異なる場合があります。いくつかのcalc_period
値を試して、環境のダーティーページ速度に合わせた最適な期間を決定できます。
- パブリックブリッジタップネットワークの既存の仮想マシンで移行を行う場合は、移行元ホストと移行先ホストが同じネットワークにある必要があります。そうでない場合は、移行後に仮想マシンのネットワークが機能しなくなります。
VM 移行を実行する場合、ソースホスト上の
virsh
クライアントは、いくつかのプロトコルの 1 つを使用して、宛先ホスト上の libvirt デーモンに接続できます。次の手順の例では SSH 接続を使用していますが、別の接続を選択することもできます。libvirt で SSH 接続を使用する場合は、
virtqemud
ソケットが有効になっていて、宛先ホストで実行されていることを確認してください。# systemctl enable --now virtqemud.socket
libvirt で TLS 接続を使用する場合は、
virtproxyd-tls
ソケットが有効になっていて、宛先ホストで実行していることを確認してください。# systemctl enable --now virtproxyd-tls.socket
libvirt で TCP 接続を使用する場合は、
virtproxyd-tcp
ソケットが有効になっていて、宛先ホストで実行していることを確認してください。# systemctl enable --now virtproxyd-tcp.socket
手順
virsh migrate
コマンドで、移行の要件に適したオプションを指定します。次のコマンドは、SSH トンネルを使用して、ローカルホストから
example-destination
ホストのシステム接続にexample-VM-1
仮想マシンを移行します。仮想マシンは移行中も稼働し続けます。# virsh migrate --persistent --live example-VM-1 qemu+ssh://example-destination/system
次のコマンドを使用すると、ローカルホストで実行している
example-VM-2
仮想マシンの設定を手動で調整し、その仮想マシンをexample-destination
ホストに移行できます。移行した仮想マシンが更新された設定を自動的に使用します。# virsh dumpxml --migratable example-VM-2 > example-VM-2.xml # vi example-VM-2.xml # virsh migrate --live --persistent --xml example-VM-2.xml example-VM-2 qemu+ssh://example-destination/system
この手順は、たとえば、移行先ホストが別のパスを使用して仮想マシンの共有ストレージにアクセスする必要がある場合、または移行先ホストに固有の機能を設定する場合に役立ちます。
次のコマンドは、
example-VM-3
仮想マシンをexample-source
ホストで一時停止してexample-destination
ホストに移行し、example-VM-3-alt.xml
ファイルが提供する調整済みの XML 設定を使用するように当該仮想マシンに指示します。移行が終了すると、libvirt
は移行先ホストで仮想マシンを再開します。# virsh migrate example-VM-3 qemu+ssh://example-source/system qemu+ssh://example-destination/system --xml example-VM-3-alt.xml
移行後、仮想マシンはソースホストでシャットオフ状態になり、移行されたコピーはシャットダウン後に削除されます。
次の例では、シャットダウンされた
example-VM-4
仮想マシンをexample-source
ホストから削除し、その設定をexample-destination
ホストに移動します。# virsh migrate --offline --persistent --undefinesource example-VM-4 qemu+ssh://example-source/system qemu+ssh://example-destination/system
このタイプの移行では、仮想マシンのディスクイメージを共有ストレージに移動する必要がないことに注意してください。ただし、移行先ホストで仮想マシンを使用するには、仮想マシンのディスクイメージも移行する必要があります。以下に例を示します。
# scp root@example-source:/var/lib/libvirt/images/example-VM-4.qcow2 root@example-destination:/var/lib/libvirt/images/example-VM-4.qcow2
次のコマンドは、example-VM-5 仮想マシンを example-destination ホストに移行し、複数の並列接続 (マルチファイル記述子 (マルチ FD) 移行とも呼ばれます) を使用します。マルチ FD 移行では、移行プロセスに利用可能なネットワーク帯域幅をすべて利用することで、移行を高速化できます。
# virsh migrate --parallel --parallel-connections 4 <example-VM-5> qemu+ssh://<example-destination>/system
この例では、4 つのマルチ FD チャネルを使用して example-VM-5 仮想マシンを移行します。利用可能なネットワーク帯域幅 10 Gbps ごとに 1 つのチャネルを使用することを推奨します。デフォルト値は 2 チャネルです。
移行が完了するまで待ちます。ネットワーク帯域幅、システムの負荷、仮想マシンのサイズによっては、プロセスに時間がかかる場合があります。
virsh migrate
で--verbose
オプションが使用されていないと、CLI はエラー以外の進捗インジケーターを表示しません。移行中は、
virsh domjobinfo
ユーティリティーを使用して移行の統計を表示できます。
検証
移行先ホストで、使用可能な仮想マシンのリストを表示して、仮想マシンが移行されたかどうかを確認します。
# virsh list Id Name State ---------------------------------- 10 example-VM-1 running
移行がまだ実行中であれば、このコマンドは、
paused
の仮想マシンのリストを表示します。
トラブルシューティング
-
ターゲットのホストは、ネットワーク名や CPU タイプなど、移行した仮想マシンの XML 設定で使用される特定の値と互換性がない場合があります。そのため、仮想マシンがターゲットホストで起動できなくなります。この問題を修正するには、
virsh edit
コマンドを使用して問題のある値を更新します。値を更新した後、変更を適用するには仮想マシンを再起動する必要があります。 ライブマイグレーションの完了に時間がかかっている場合は、仮想マシンの負荷が高く、ライブマイグレーションを実行するために変更しているメモリーページ多すぎる可能性があります。この問題を解決するには、仮想マシンを一時停止して、移行を非ライブマイグレーションに変更します。
# virsh suspend example-VM-1
関連情報
-
virsh migrate --help
コマンド -
virsh(1)
man ページ