第4章 KVM のライブマイグレーション
本章では、あるホストの物理マシンで実行中のゲスト仮想マシンを別のホスト物理マシンに移行する方法について説明します。いずれのインスタンスでも、ホストの物理マシンが KVM ハイパーバイザーを実行しています。
移行では、ゲスト仮想マシンをあるホストの物理マシンから別のホストの物理マシンに移動するプロセスを説明します。これは、ゲスト仮想マシンがハードウェア上で直接ではなく仮想化環境で実行しているため可能です。移行は、以下の場合に役立ちます。
- 負荷分散: ゲスト仮想マシンは、ホスト物理マシンが過負荷になった場合、または別のホスト物理マシンが十分に活用されていない場合に、使用率の低いホスト物理マシンに移動できます。
- ハードウェア独立性: ホストの物理マシンでハードウェアデバイスをアップグレード、追加、または削除する必要がある場合、ゲスト仮想マシンを他のホストの物理マシンに安全に移動できます。つまり、ゲスト仮想マシンでは、ハードウェアの改善のためのダウンタイムが発生しません。
- 省エネ: ゲスト仮想マシンを他のホスト物理マシンに再配布できるため、電源をオフにして、低使用期間でエネルギーを節約し、コストを削減できます。
- 地理的な移行: 待ち時間を短縮するため、または深刻な状況では、ゲスト仮想マシンを別の場所に移動できます。
移行は、ゲスト仮想マシンのメモリーと仮想デバイスの状態を移行先ホストの物理マシンに送信することで機能します。共有されたネットワークストレージを使用して、ゲスト仮想マシンのイメージを移行することが推奨されます。仮想マシンを移行するときは、共有ストレージに libvirt が管理するストレージプールを使用することもお勧めします。
移行はライブで実行でき、実行できません。
ライブマイグレーションでは、ゲスト仮想マシンはソースホスト物理マシン上で実行を継続し、そのメモリーページは宛先ホスト物理マシンに順番に転送されます。移行中、KVM は、すでに転送されたページの変更についてソースを監視し、すべての初期ページが転送されたときにこれらの変更の転送を開始します。KVM は、移行中の転送速度も推定するため、転送するデータの残りの量が一定の設定可能な期間 (デフォルトでは 10 ミリ秒) に達すると、KVM が元のゲスト仮想マシンを一時停止し、残りのデータを転送して、移行先ホストの物理マシンで同じゲスト仮想マシンを再開します。
ライブで実行されない移行は、ゲスト仮想マシンを一時停止してから、ゲスト仮想マシンのメモリーのイメージを移行先のホスト物理マシンに移動します。次に、ゲスト仮想マシンが宛先ホスト物理マシンで再開され、ソースホスト物理マシンで使用されていたゲスト仮想マシンのメモリーが解放されます。このような移行を完了するのにかかる時間は、ネットワークの帯域幅と遅延によって異なります。ネットワークが頻繁に使用されているか、帯域幅が狭い場合、移行にははるかに長い時間がかかります。
元のゲスト仮想マシンがページを KVM が宛先ホストの物理マシンに転送するよりも速く変更する場合は、ライブ移行が完了しないため、オフライン移行を使用する必要があります。
4.1. ライブマイグレーションの要件
ゲスト仮想マシンを移行するには、以下が必要です。
移行の要件
- 次のいずれかのプロトコルを使用して、共有ストレージにインストールされたゲスト仮想マシン。
- ファイバーチャネルベースの LUN
- iSCSI
- FCoE
- NFS
- GFS2
- SCSI RDMA プロトコル (SCSI RCP) - Infiniband アダプターおよび 10GbE iWARP アダプターで使用されるブロックエクスポートプロトコル
- 移行プラットフォームおよびバージョンは、テーブル 表4.1「ライブマイグレーションの互換性」 に対して確認する必要があります。また、Red Hat Enterprise Linux 6 は、共有ストレージ上の raw イメージと qcow2 イメージを使用したゲスト仮想マシンのライブマイグレーションをサポートしていることにも注意してください。
- 両方のシステムで、適切な TCP/IP ポートが開いている必要があります。ファイアウォールが使用されている場合は、詳細なポート情報の https://access.redhat.com/site/documentation/ で見つかる 『Red Hat Enterprise Linux Virtualization セキュリティーガイド』 を参照してください。
- 共有ストレージメディアをエクスポートする別のシステム。ストレージは、移行に使用される 2 つのホストマシンのいずれかに配置しないでください。
- 共有ストレージは、移行元システムと移行先システムの同じ場所にマウントする必要があります。マウントするディレクトリー名は同じである必要があります。別のパスを使用してイメージを保持することもできますが、推奨されません。virt-manager を使用して移行を行う場合は、パス名が同じである必要があることに注意してください。ただし、virsh を使用して移行を実行する場合は、移行を実行するときに --xml オプションまたはプリフックを使用して、さまざまなネットワーク設定とマウントディレクトリーを使用できます。共有ストレージがなくても、オプション --copy-storage-all (非推奨) を使用して移行を成功させることができます。prehooks の詳細は、 libvirt.org を参照してください。XML オプションの詳細については、20章ドメイン XML の操作 を参照してください。
- パブリックブリッジ + タップネットワーク内の既存のゲスト仮想マシンで移行を試みる場合、移行元と移行先のホスト物理マシンは同じネットワークに配置する必要があります。この手順を行わないと、ゲストの仮想マシンネットワークが移行後に動作しません。
- Red Hat Enterprise Linux 5 および 6 では、KVM ゲスト仮想マシンのデフォルトのキャッシュモードが
none
に設定されているため、ディスクの状態に一貫性がありません。キャッシュオプションをnone
(たとえば、virsh attach-disk cache none を使用) に設定すると、O_DIRECT
フラグを使用してゲスト仮想マシンのファイルが開かれます (オープン システムコールを呼び出す場合)。つまり、ホストの物理マシンのキャッシュを回避し、ゲスト仮想マシンでキャッシュのみを提供します。キャッシュモードをnone
に設定すると、不整合の問題が回避され、使用すると、仮想マシンのライブマイグレーションが可能になります。キャッシュをnone
に設定する方法は、「ゲストへのストレージデバイスの追加」 を参照してください。
libvirtd
サービスが有効になっていて (#chkconfig libvirtd on)、実行されている (#service libvirtd start) ことを確認してください。また、効果的に移行する機能は、/etc/libvirt/libvirtd.conf
設定ファイルのパラメーターの設定に依存することに注意してください。
手順4.1 libvirtd.conf の設定
libvirtd.conf
を開くには、root で次のコマンドを実行する必要があります。# vim /etc/libvirt/libvirtd.conf
- 必要に応じてパラメーターを変更し、ファイルを保存します。
libvirtd
サービスを再起動します。# service libvirtd restart