12.6. コマンドラインインターフェイスを使用した仮想マシンの移行
仮想マシンの現在のホストが不安定な場合や使用できない場合や、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。次の手順では、このような移行のさまざまなシナリオの手順と例を示します。
前提条件
- 移行元ホストと移行先ホストはいずれも KVM ハイパーバイザーを使用します。
-
移行元ホストと移行先のホストは、ネットワーク経由で相互に通信できなければなりません。
ping
ユーティリティーを使用してこれを確認します。 移行先ホストで以下のポートが開いていることを確認します。
- ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
- ポート 16509 は、TLS を使用して宛先ホストに接続するために必要です。
- ポート 16514 は、TCP を使用して宛先ホストに接続するために必要です。
- ポート 49152-49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
- Red Hat が移行に対応できるようにするには、移行元ホストと移行先のホストが特定のオペレーティングシステムとマシンタイプを使用している必要があります。これを確認するには、Supported hosts for virtual machine migration を参照してください。
- 仮想マシンは、移行先ホストの CPU 機能と互換性がある必要があります。これを確認するには、仮想マシン移行のホスト CPU の互換性の確認 を参照してください。
移行する仮想マシンのディスクイメージが、ソースホストと宛先ホストの両方にアクセスできる別のネットワーク上の場所にある。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。
このような仮想マシンの共有ストレージを設定する手順は、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 では、ネットワークの帯域幅が仮想マシンのダーティーページの生成速度を大幅に上回ることを推奨しています。
- パブリックブリッジタップネットワークの既存の仮想マシンで移行を行う場合は、移行元ホストと移行先ホストが同じネットワークにある必要があります。そうでない場合は、移行後に仮想マシンのネットワークが機能しなくなります。
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
コマンドで、移行の要件に適したオプションを指定します。以下のコマンドは、
example-VM-1 仮想
マシンをローカルホストから、SSH トンネルを使用してexample-destination
ホストのシステム接続に移行します。仮想マシンは、移行中も実行し続けます。# 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-source
ホストからexample-VM-3
仮想マシンを一時停止し、それを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-source
ホストからシャットダウンしたexample-VM-4
仮想マシンを削除し、その設定を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
移行が完了するまで待ちます。ネットワーク帯域幅、システムの負荷、仮想マシンのサイズによっては、プロセスに時間がかかる場合があります。
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
コマンド -
man ページの
virsh (1)