Menu Close
Settings Close

Language and Page Formatting Options

12.5. コマンドラインインターフェイスでの仮想マシンの移行

仮想マシンの現在のホストが不安定な場合や使用できない場合や、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。以下のセクションでは、このような移行のさまざまなシナリオの手順と例を説明します。

前提条件

  • 移行元ホストと移行先ホストはいずれも KVM ハイパーバイザーを使用します。
  • 移行元ホストと移行先のホストは、ネットワーク経由で相互に通信できなければなりません。ping ユーティリティーを使用してこれを確認します。
  • 移行先ホストで以下のポートが開いていることを確認します。

    • ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
    • ポート 16509 は、TLS を使用して宛先ホストに接続するために必要です。
    • ポート 16514 は、TCP を使用して宛先ホストに接続するために必要です。
    • ポート 49152-49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
  • Red Hat が移行に対応できるようにするには、移行元ホストと移行先のホストが特定のオペレーティングシステムとマシンタイプを使用している必要があります。これを確認するには、Supported hosts for virtual machine migration を参照してください。
  • 移行される VM のディスクイメージは、ソースホストと宛先ホストの両方にアクセスできる別のネットワーク上の場所にあります。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。

    このような仮想マシンの共有ストレージを設定する手順は、Sharing virtual machine disk images with other hosts を参照してください。

  • 仮想マシンの実行中に移行する場合は、ネットワークの帯域幅が、仮想マシンがダーティーメモリーページを生成するレートを超える必要があります。

    ライブマイグレーションを開始する前に仮想マシンのダーティーページレートを取得するには、次の手順を実行します。

    1. 短期間、仮想マシンのダーティーページ生成の速度を監視します。

      # virsh domdirtyrate-calc vm-name 30
    2. 監視が終了したら、結果を取得します。

      # virsh domstats vm-name --dirtyrate
      Domain: 'vm-name'
        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

手順

  1. virsh migrate コマンドで、移行の要件に適したオプションを指定します。

    • 以下では、SSH トンネルを使用して、ローカルホストから dest-example ホストのシステム接続に、wanderer1 仮想マシンを移行します。仮想マシンは移行中も稼働し続けます。

      # virsh migrate --persistent --live wanderer1 qemu+ssh://dest-example/system
    • 次のコマンドでは、ローカルホストで実行している仮想マシン wanderer2 の設定を手動で調整し、仮想マシンを dest-example ホストに移行できます。移行した仮想マシンが更新された設定を自動的に使用します。

      # virsh dumpxml --migratable wanderer2 >wanderer2.xml
      # vi wanderer2.xml
      # virsh migrate --live --persistent --xml wanderer2.xml wanderer2 qemu+ssh://dest-example/system

      この手順は、たとえば、移行先ホストが別のパスを使用して仮想マシンの共有ストレージにアクセスする必要がある場合、または移行先ホストに固有の機能を設定する場合に役立ちます。

    • 以下では、source-example ホストから wanderer3 仮想マシンを停止して、dest-example ホストに移行し、wanderer3-alt.xml が提供する調整済みの XML 設定を使用するように指示します。移行が終了すると、libvirt は移行先ホストで仮想マシンを再開します。

      # virsh migrate wanderer3 qemu+ssh://source-example/system qemu+ssh://dest-example/system --xml wanderer3-alt.xml

      移行後、仮想マシンはソースホストでシャットオフ状態になり、移行されたコピーはシャットダウン後に削除されます。

    • 以下では、source-example ホストからシャットダウンされた wanderer4 仮想マシンを削除し、その設定を dest-example ホストに移動します。

      # virsh migrate --offline --persistent --undefinesource wanderer4 qemu+ssh://source-example/system qemu+ssh://dest-example/system

      このタイプの移行では、仮想マシンのディスクイメージを共有ストレージに移動する必要がないことに注意してください。ただし、移行先ホストで仮想マシンを使用するには、仮想マシンのディスクイメージも移行する必要があります。以下に例を示します。

      # scp root@source-example:/var/lib/libvirt/images/wanderer4.qcow2 root@dest-example:/var/lib/libvirt/images/wanderer4.qcow2
  2. 移行が完了するまで待ちます。ネットワーク帯域幅、システムの負荷、仮想マシンのサイズによっては、プロセスに時間がかかる場合があります。virsh migrate--verbose オプションが使用されていないと、CLI はエラー以外の進捗インジケーターを表示しません。

    移行中は、virsh domjobinfo ユーティリティーを使用して移行の統計を表示できます。

検証

  • 移行先ホストで、使用可能な仮想マシンの一覧を表示して、仮想マシンが移行されたかどうかを確認します。

    # virsh list
    Id Name                 State
    ----------------------------------
    10 wanderer1              running

    移行がまだ実行中であれば、このコマンドは、paused の仮想マシンの一覧を表示します。

トラブルシューティング

  • ターゲットのホストは、ネットワーク名や CPU タイプなど、移行した仮想マシンの XML 設定で使用される特定の値と互換性がない場合があります。そのため、仮想マシンがターゲットホストで起動できなくなります。この問題を修正するには、virsh edit コマンドを使用して問題のある値を更新します。値を更新した後、変更を適用するには仮想マシンを再起動する必要があります。
  • ライブマイグレーションの完了に時間がかかっている場合は、仮想マシンの負荷が高く、ライブマイグレーションを実行するために変更しているメモリーページ多すぎる可能性があります。この問題を修正するには、仮想マシンを停止して、ライブ以外への移行に変更します。

    # virsh suspend wanderer1

関連情報

  • virsh migrate --help コマンド
  • virsh の man ページ