10.4. コマンドラインインターフェイスを使用した仮想マシンの移行
仮想マシンの現在のホストが不安定な場合や使用できない場合や、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。ライブ移行 または オフライン移行を 実行できます。2 つのシナリオの違いについては、仮想マシンの移行の仕組み を参照してください。
前提条件
- ハイパーバイザー: ソースホストと宛先ホストの両方が KVM ハイパーバイザーを使用します。
-
ネットワーク接続: 送信元ホストと宛先ホストはネットワーク経由で相互にアクセスできます。
ping
ユーティリティーを使用してこれを確認します。 開いているポート: 宛先ホストで次のポートが開いていることを確認します。
- ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
- ポート 16509 は、TLS を使用して宛先ホストに接続するために必要です。
- ポート 16514 は、TCP を使用して宛先ホストに接続するために必要です。
- ポート 49152 - 49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
- ホスト: 移行が Red Hat でサポートされるためには、ソースホストと宛先ホストで特定のオペレーティングシステムとマシンタイプを使用している必要があります。これを確認するには、Supported hosts for virtual machine migration を参照してください。
- CPU: 仮想マシンは、宛先ホストの 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
値を試して、環境のダーティーページ速度に合わせた最適な期間を決定できます。
- ブリッジタップネットワークの詳細: パブリックブリッジタップネットワーク内の既存の仮想マシンを移行する場合、ソースホストと宛先ホストは同じネットワーク上に配置されている必要があります。そうでない場合は、移行後に仮想マシンのネットワークが機能しなくなります。
libvirtd:
libvirtd
サービスが有効になっていて実行されていることを確認します。# systemctl enable --now libvirtd.service
手順
仮想マシンをあるホストから別のホストに移行するには、virsh migrate
コマンドを使用します。
オフラインマイグレーション
次のコマンドは、SSH トンネルを使用して、シャットオフされた
example- 仮想マシン
仮想マシンをローカルホストからexample-destination
ホストのシステム接続に移行します。# virsh migrate --offline --persistent <example_VM> qemu+ssh://example-destination/system
ライブマイグレーション
次のコマンドは、SSH トンネルを使用して、
example- 仮想マシン
仮想マシンをローカルホストからexample-destination
ホストのシステム接続に移行します。仮想マシンは移行中も稼働し続けます。# virsh migrate --live --persistent <example_VM> qemu+ssh://example-destination/system
移行が完了するまで待ちます。ネットワーク帯域幅、システム負荷、仮想マシンのサイズによっては、このプロセスに時間がかかる場合があります。
virsh migrate
で--verbose
オプションが使用されていないと、CLI はエラー以外の進捗インジケーターを表示しません。移行中は、
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>
Post-copy migration
仮想マシンのメモリーフットプリントが大きい場合は、コピー後の 移行を実行できます。これにより、まずソース仮想マシンの CPU 状態が転送され、移行された仮想マシンが宛先ホスト上ですぐに起動されます。移行された仮想マシンが宛先ホスト上ですでに実行された後に、ソース仮想マシンのメモリーページが転送されます。このため、コピー後の 移行では、移行された仮想マシンのダウンタイムが短くなる可能性があります。
ただし、宛先ホスト上で実行中の仮想マシンがまだ転送されていないメモリーページにアクセスしようとする可能性があり、ページフォールトが 発生します。移行中に ページフォールト が多すぎると、移行された仮想マシンのパフォーマンスが大幅に低下する可能性があります。
コピー後 の移行が複雑になる可能性があることを考慮すると、標準のライブ移行を開始し、指定された時間内にライブ移行を完了できない場合は コピー後の 移行に切り替える次のコマンドを使用することを推奨します。
# virsh migrate --live --persistent --postcopy --timeout <time_interval_in_seconds> --timeout-postcopy <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
仮想マシンの状態が
実行
中と表示されている場合、移行が完了したことを意味します。ただし、ライブマイグレーションがまだ進行中の場合、宛先仮想マシンの状態は一時停止
として表示されます。
コピー後の 移行の場合:
ソースホストで、利用可能な仮想マシンをリスト表示して、ソース仮想マシンの状態を確認します。
# 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
として表示されている場合、移行は完了していることを意味します。
関連情報
-
virsh migrate --help
コマンド -
システム上の
virsh (1)
man ページ