12.4. コマンドラインを使用した仮想マシンの移行
仮想マシンの現在のホストが不安定な場合や使用できない場合や、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。
ライブマイグレーション または オフラインマイグレーション を実行できます。2 つの手順の違いは、仮想マシンの移行の仕組み を参照してください。
前提条件
- ハイパーバイザー
- 移行元ホストと移行先ホストが、どちらも KVM ハイパーバイザーを使用している必要があります。
- ネットワーク接続
-
移行元ホストと移行先のホストは、ネットワーク経由で相互に通信できなければなりません。
pingユーティリティーを使用してこれを確認します。 - ポートの開放
移行先ホストで次のポートが開いていることを確認します。
- ポート 22 は、SSH を使用して移行先ホストに接続するために必要です。
- ポート 16514 は、TLS を使用して移行先ホストに接続するために必要です。
- ポート 16509 は、TCP を使用して移行先ホストに接続するために必要です。
- ポート 49152 - 49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
- ホスト
- 移行に関する Red Hat のサポートを受けるには、移行元ホストと移行先ホストで特定のオペレーティングシステムとマシンタイプが使用されている必要があります。これを確認するには、仮想マシン移行のサポート対象となるホスト を参照してください。
- CPU
- 仮想マシンは、移行先ホストの CPU 機能と互換性がある必要があります。これを確認するには、仮想マシンの移行におけるホスト CPU の互換性の確認 を参照してください。
- ストレージ
移行する仮想マシンのディスクイメージに、移行元のホストと移行先のホストの両方からアクセス可能である必要があります。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。両方のホストのストレージアクセスを確保するには、次のいずれかに該当している必要があります。
- ストレージエリアネットワーク (SAN) 論理ユニット (LUN) を使用している。
- Ceph Storage クラスター を使用している。
-
移行元の仮想マシンディスクと同じ形式とサイズの ディスクイメージを作成 した。なお、この方法では、仮想マシンを移行する際に
--copy-storage-allパラメーターを使用する必要があります。 - ディスクイメージが別のネットワーク上の場所にある。このような仮想マシンの共有ストレージを設定する手順は、他のホストとの仮想マシンディスクイメージの共有 を参照してください。
- ネットワーク帯域幅
仮想マシンの実行中に移行する場合は、ネットワークの帯域幅が、仮想マシンがダーティーメモリーページを生成する速度を超える必要があります。
ライブマイグレーションを開始する前に仮想マシンのダーティーページ速度を取得するには、次の手順を実行します。
短期間、仮想マシンのダーティーページ生成速度を監視します。
# 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 のダーティーメモリーページを生成しています。帯域幅が 2 MB/s 以下のネットワーク上でこのような仮想マシンをライブマイグレーションしようとすると、仮想マシンを一時停止するかワークロードを減らさない限り、ライブマイグレーションが進行しなくなります。
ライブマイグレーションが正常に完了するように、仮想マシンのダーティーページの生成速度を大幅に上回るネットワーク帯域幅が必要です。
注記calc_periodオプションの値は、ワークロードとダーティーページ速度により異なる場合があります。いくつかのcalc_period値を試して、環境のダーティーページ速度に合わせた最適な期間を決定できます。
- ブリッジタップネットワークの詳細
- パブリックブリッジタップネットワークの既存の仮想マシンで移行を行う場合は、移行元ホストと移行先ホストが同じネットワークにある必要があります。そうでない場合、移行後に仮想マシンネットワークが機能しなくなります。
- 接続プロトコル
VM 移行を実行する場合、移行元ホスト上の
virshクライアントは、いくつかのプロトコルの 1 つを使用して、移行先ホスト上の libvirt デーモンに接続できます。次の手順の例では SSH 接続を使用していますが、別の接続を選択することもできます。libvirt で SSH 接続を使用する場合は、
virtqemudソケットが有効になっていて、移行先ホストで実行されていることを確認してください。# systemctl enable --now virtqemud.socketlibvirt で TLS 接続を使用する場合は、
virtproxyd-tlsソケットが有効になっていて、移行先ホストで実行していることを確認してください。# systemctl enable --now virtproxyd-tls.socketlibvirt で TCP 接続を使用する場合は、
virtproxyd-tcpソケットが有効になっていて、移行先ホストで実行していることを確認してください。# systemctl enable --now virtproxyd-tcp.socket
手順
オフラインマイグレーション
シャットオフされた仮想マシンを移行するには、
virsh migrate --offlineコマンドを使用します。以下の例では、SSH トンネルを使用して、シャットオフされたexample-VM仮想マシンをローカルホストからexample-destinationホストのシステム接続に移行します。# virsh migrate \ --offline --persistent <example_VM> \ qemu+ssh://example-destination/system
ライブマイグレーション
実行中の仮想マシンを移行するには、
virsh migrate --liveコマンドを使用します。以下の例では、SSH トンネルを使用して、ライブexample-VM仮想マシンをローカルホストからexample-destinationホストのシステム接続に移行します。# virsh migrate \ --live --persistent <example_VM> \ qemu+ssh://example-destination/system移行が完了するまで待ちます。ネットワーク帯域幅、システム負荷、仮想マシンのサイズによっては、このプロセスに時間がかかる場合があります。
virsh migrateコマンドで--verboseオプションを使用しないと、コマンドラインに、エラー以外の進捗を示す情報が一切表示されなくなります。移行中は、
virsh domjobinfoユーティリティーを使用して移行の統計を表示できます。
マルチ FD ライブマイグレーション
ライブマイグレーション中に、移行先ホストへの複数の並列接続を使用できます。これは、複数のファイル記述子 (マルチ FD) マイグレーションとも呼ばれます。マルチ FD マイグレーションを使用すると、利用可能なすべてのネットワーク帯域幅を移行プロセスに活用することで、移行を高速化できます。
# virsh migrate \ --live --persistent \ --parallel --parallel-connections 4 \ <example_VM> qemu+ssh://<example-destination>/systemこの例では、4 つのマルチ FD チャネルを使用して <example_VM> 仮想マシンを移行します。利用可能なネットワーク帯域幅 10 Gbps ごとに 1 つのチャネルを使用することを推奨します。デフォルト値は 2 チャネルです。
ダウンタイム制限を延長したライブマイグレーション
ライブマイグレーション中に仮想マシンを一時停止できる最大時間 (ミリ秒単位) を指定する
maxdowntimeパラメーターを設定することで、ライブマイグレーションの信頼性を向上できます。ダウンタイムを長く設定すると、マイグレーションが正常に完了するようになります。# virsh migrate-setmaxdowntime \ <example_VM> \ <time_interval_in_milliseconds>
パスワードなし SSH 認証によるライブマイグレーション
移行中にリモートホストの SSH パスワードを入力する手間を省くため、代わりに移行で使用する秘密鍵ファイルを指定できます。これは、たとえば自動移行スクリプトやピアツーピア移行などで役立ちます。
# virsh migrate \ --live --persistent <example_VM> \ qemu+ssh://<example-destination>/system?keyfile=<path_to_key>
Post-copy migration
仮想マシンのメモリーフットプリントが大きい場合は、コピー後 のマイグレーションを実行できます。これにより、まずソース仮想マシンの CPU 状態が転送され、移行された仮想マシンが移行先ホスト上ですぐに起動されます。移行された仮想マシンが移行先ホスト上ですでに実行された後に、ソース仮想マシンのメモリーページが転送されます。このため、コピー後 のマイグレーションでは、移行された仮想マシンのダウンタイムが短くなる可能性があります。
ただし、移行先ホスト上で実行中の仮想マシンが、まだ転送されていないメモリーページにアクセスしようとする可能性があり、これにより、ページフォールト が発生します。移行中の ページフォールト の発生が多すぎると、移行された仮想マシンのパフォーマンスが大幅に低下する可能性があります。
post-copy 移行では複雑な問題が発生する可能性があるため、ほとんどのユースケースでは以下のコマンドを使用してください。これは標準的なライブマイグレーションを使用し、指定された時間内にライブマイグレーションが完了できない場合は、post-copy 移行に切り替えます。
# virsh migrate \ --live --persistent --postcopy \ --timeout <time_interval_in_seconds> \ --timeout-postcopy <example_VM> \ qemu+ssh://<example-destination>/systemRHEL 10.1 以降では、
multifdpre-copy フェーズから開始し、その後 post-copy 移行に切り替える移行方法を使用することで、メモリーを大量に消費する仮想マシンをライブマイグレーションすることも可能です。これにより、移行のパフォーマンスと柔軟性が向上します。# virsh migrate \ --live --persistent --parallel \ --postcopy --postcopy-after-precopy \ <example_VM> \ qemu+ssh://<example-destination>/system
自動コンバージドライブマイグレーション
仮想マシンのメモリーワークロードが高い場合は、
--auto-convergeオプションを使用できます。このオプションは、仮想マシンの CPU の実行速度を自動的に低下させます。その結果、この CPU スロットリングはメモリー書き込み速度を低下させるのに役立ちます。これにより、メモリーワークロードの高い仮想マシンでもライブマイグレーションが成功する可能性があります。ただし、CPU スロットリングは、メモリー書き込みが CPU 実行速度に直接関係しないワークロードの解決には役立たず、ライブマイグレーション中に仮想マシンのパフォーマンスに悪影響を与える可能性があります。
# virsh migrate \ --live --persistent --auto-converge \ <example_VM> qemu+ssh://<example-destination>/system
検証
オフライン マイグレーションの場合:
移行先ホストで、利用可能な仮想マシンをリスト表示して、仮想マシンが正常に移行されたことを確認します。
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 shut off
ライブ マイグレーションの場合:
移行先ホストで、利用可能な仮想マシンをリスト表示して、宛先仮想マシンの状態を確認します。
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 running仮想マシンの状態が
runningと表示されている場合、移行が完了したことを意味します。ただし、ライブマイグレーションがまだ進行中の場合は、移行先の仮想マシンの状態はpausedと表示されます。
コピー後 のマイグレーションの場合:
移行元ホストで、利用可能な仮想マシンをリスト表示して、ソース仮想マシンの状態を確認します。
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 shut off移行先ホストで、利用可能な仮想マシンをリスト表示して、宛先仮想マシンの状態を確認します。
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 runningソース仮想マシンの状態が
shut offと表示され、宛先仮想マシンの状態がrunningと表示されている場合、移行は完了していることを意味します。