第5章 KVM のライブマイグレーション

本章では、あるホスト物理マシンで実行中のゲスト仮想マシンを別のホスト物理マシンに移行する方法について説明します。どちらのインスタンスでも、ホスト物理マシンは KVM ハイパーバイザーを実行しています。
移行とは、ゲスト仮想マシンをあるホスト物理マシンから別のホスト物理マシンに移行するプロセスです。移行が可能である理由は、ゲスト仮想マシンはハードウェア上で直接実行されておらず、仮想化環境内で実行されているためです。移行は以下の点で有用となります。
  • 負荷分散: ホスト物理マシンに負荷がかかりすぎた場合に使用率の低いホスト物理マシンにゲスト仮想マシンを移動したり、別のホスト物理マシンの使用率が低くなっている場合にそちらにゲスト仮想マシンを移動して負荷分散をすることができます。
  • ハードウェアの非依存性: ホスト物理マシン上のハードウェアデバイスのアップグレード、追加または削除などを行う必要がある場合、ゲスト仮想マシン群を安全に別のホスト物理マシンに移動することができます。つまり、テスト仮想マシンはハードウェアを改善する際に生じ得るダウンタイムを経験することはありません。
  • 省エネ: ゲスト仮想マシンを別のホスト物理マシンに再配分し、電源をオフにして節電することで使用量の低い時間帯にコストを節約することができます。
  • 地理的な移行: ゲスト仮想マシンは、待ち時間を短縮するため、または重大な状況が発生した場合に別の場所に移動することができます。
ゲスト仮想マシンのメモリーと仮想化しているデバイスの状態を移行先ホスト物理マシンに送信することで移行が行なわれます。移行するゲスト仮想マシンのイメージは、ネットワーク接続されている共有ストレージに格納することをお勧めします。また、仮想マシンを移行する際の共有ストレージには libvirt 管理のストレージプールを使用することをお勧めします。
移行はライブまたはオフラインのいずれでも実行することができます。
ライブマイグレーションでは、ゲスト仮想マシンをソースのホスト物理マシン上で稼働させたままそのメモリーページを移行先ホスト物理マシンに順番に転送します。移行時に、KVM はすでに転送されたページに変更がないかソースを監視し、最初のページがすべて転送されるとこれらの検出した変更の転送を開始します。また、KVM は移行時の転送速度を推定できるため、データ残量の転送時間が一定の設定時間になると (デフォルトでは 10 ミリ秒)、オリジナルのゲスト仮想マシンを停止して残りのデータを転送し、移行先ホスト物理マシンでその同じゲスト仮想マシンを再開します。
ライブでは行なわない移行の場合には、ゲスト仮想マシンをいったん停止してからゲスト仮想マシンのメモリーイメージを移行先ホスト物理マシンに移行します。移行後に移行先ホスト物理マシンでゲスト仮想マシンを再開し、ソースのホスト物理マシンでゲスト仮想マシンが使用していたメモリーを解放します。この移行が完了するまでに要する時間はネットワークの帯域幅および待ち時間によって異なります。ネットワークが混雑している場合や帯域幅が狭い場合は、移行にかかる時間も長くなります。
オリジナルのゲスト仮想マシンが KVM が移行先ホスト物理マシンに移行するよりも速い速度でページを変更する場合、ライブマイグレーションがいつまでも完了しない状態になるため、オフライン移行を使用してください。

5.1. ライブマイグレーションの要件

ゲスト仮想マシンの移行には以下が必要になります。

移行の要件

  • 次のいずれかのプロトコルを使用してゲスト仮想マシンを共有ストレージにインストールする場合:
    • ファイバーチャンネルベースの LUN
    • iSCSI
    • FCoE
    • NFS
    • GFS2
    • SCSI RDMA プロトコル (SCSI RCP): Infiniband および 10GbE iWARP アダプターで使用されているブロックエクスポートプロトコル
  • 表5.1「ライブマイグレーションの互換性」の表で移行できるプラットフォームとバージョンを確認してください。また、Red Hat Enterprise Linux 6 は、共有ストレージ上で raw および qcow2 イメージを使用したゲスト仮想マシンのライブマイグレーションに対応していることに注意してください。
  • 両方のシステムで適切な TCP/IP ポートを開いておく必要があります。ファイアウォールが使用されている場合には、ポートの詳細について、「仮想化のファイアウォール情報」を参照してください。
  • 共有ストレージ媒体のエクスポートを行うシステムが別途必要になります。ストレージは、移行に使用する 2 つのホスト物理マシンのいずれにも存在させないようにしてください。
  • 共有ストレージは、ソースシステムと移行先システムの同じ場所にマウントします。マウントするディレクトリー名も同一にする必要があります。異なるパスでイメージを維持することは可能ですが、推奨されていません。virt-manager を使って移行を行なう予定の場合、パス名は同一である必要があります。ただし、virsh を使って移行を行なう予定の場合は、移行する際に --xml オプションや pre-hooks を使うと異なるネットワーク設定やマウントディレクトリーを使用することができます。共有ストレージがなくても、--copy-storage-all オプションを使って移行を完了することも可能です (非推奨)。prehooks についての詳細は、libvirt.org を参照してください。また、XML オプションについては、21章ドメイン XML の操作 をご覧ください。
  • 公共のブリッジタップネットワーク内の既存のゲスト仮想マシンで移行を行う場合、ソースのホスト物理マシンと移行先ホスト物理マシンは同じネットワーク内になければなりません。ネットワークが異なると、ゲスト仮想マシンのネットワークが移行後に機能しなくなります。
  • Red Hat Enterprise Linux 5 および 6 では、KVM ゲスト仮想マシンのデフォルトキャッシュモードは none に設定されおり、これがディスク状態の不整合を回避します。(たとえば、virsh attach-disk cache none を使って) キャッシュオプションを none に設定すると、仮想ゲストマシンのファイルすべてが (open システムコール呼び出しの際に) O_DIRECT フラグを使って開かれるようになり、ホスト物理マシンのキャッシュが迂回され、仮想ゲストマシンにのみキャッシュが提供されます。キャッシュモードを none に設定すると潜在的な不整合問題が回避され、仮想マシンのライブ移行が可能になります。キャッシュを none に設定することについての詳細情報は、「ゲストにストレージデバイスを追加する」 を参照してください。
libvirtd サービスが有効になっていること (# chkconfig libvirtd on)、またこのサービスを実行していること (# service libvirtd start) を確認します。移行を効率的に行なえるかどうかは /etc/libvirt/libvirtd.conf 設定ファイル内のパラメーターの設定によって決まる点にも十分に注意してください。

手順5.1 libvirtd.conf の設定

  1. libvirtd.conf を開くには、root で次のコマンドを実行する必要があります。
    # vim /etc/libvirt/libvirtd.conf
  2. 必要に応じてパラメーターを変更し、ファイルを保存します。
  3. libvirtd サービスを再起動します。
    # service libvirtd restart