第9章 VM ゲスト の管理

目次

9.1. VM ゲスト の移行
9.2. 監視

9.1. VM ゲスト の移行

仮想化を利用する大きな利点のうちの 1 つに、 VM ゲスト の可搬性があげられます。 VM ホストサーバ をメンテナンスなどの理由でダウンさせなければならないような場合や、 ホストの負荷が大きすぎるような場合、ゲストを他の VM ホストサーバ に対して簡単に 移動することができます。 KVM や Xen では ライブ マイグレーションにも対応していて、 VM ゲスト を常に提供しながら移行作業を 実施することができます。

VM ゲスト を他の VM ホストサーバ に正しく移行できるようにするためには、 下記の要件が満たされていることを確認してください:

  • 現行のホストと移行先のホストの両方で、プロセッサの製造元が同じである こと (Intel または AMD) 。

  • VM ゲスト が 64 ビット版のオペレーティングシステムを利用している場合、 移行先のホストでも 64 ビット版のオペレーティングシステムが動作している こと (32 ビット版の VM ゲスト であれば、 32 ビットと 64 ビットの両方の ホストに移行できます) 。

  • 両方のホストから (たとえば NFS や SCSI を介して) ストレージデバイスに アクセスできること、および両方のマシンでストレージプールが設定されている こと (詳しくは 第7章 ストレージの管理 を参照) 。 これは CD-ROM やフロッピィディスクのイメージについても同様で、移動する 時点で必要なものであれば、必ず両方のホストからアクセスできなければ なりません (不要であれば移動前に切断することもできます。詳しくは 8.4項 「Virtual Machine Manager を利用したフロッピィディスクまたは CD/DVD-ROM メディアの取り出しと交換」 をお読みください) 。

  • libvirtd が両方の VM ホストサーバ で動作していて、互いに相手方の libvirt に 対してリモート接続を行なうことができること。詳しくは 6.2項 「リモート接続の設定」 をお読みください。

  • 移行先のホストでファイアウオールが動作している場合は、移行中に必要な ポートを開く必要があります。移行処理時に特にポートを指定しない場合、 libvirt は 49152 から 49215 までのいずれかのポートを利用します。この 範囲のポート全体 (推奨) または移行中に指定したポートについて、 移行先のホスト のファイアウオールで開かれていることを 確認してください。

  • 移行元と移行先のホストが同じサブネット内に存在していること。異なる サブネット内に存在していると、移行処理が正しく動作しない場合があります。

  • 移行先のホストで、同じ名前で稼働しているか、もしくは一時停止している VM ゲスト が存在しないこと。同じ名前でシャットダウン済みのゲストが 存在した場合は、設定が上書きされます。

  • VM ゲスト を移行する場合、既定の CPU モデル (qemu64) のみを使用する ことができます。

  • SATA ディスクのデバイスタイプは、移行することができません。

  • ファイルシステムのパススルー機能は、移行処理には対応していません。

9.1.1. virt-manager を利用した移行

Virtual Machine Manager を利用した VM ゲスト を移行する場合、どのマシンで起動しても移行 作業を行なうことができます。 Virtual Machine Manager を移行元や移行先のホストで動作させて 移行することができるほか、別のホストから実行してもかまいません。別の ホストから実行する場合は、移行元と移行先の両方に対して、リモートからの 接続を行なえる必要があります。

  1. Virtual Machine Manager を起動して移行元と移行先の両方のホストに対して、接続を確立します。 Virtual Machine Manager を移行元や移行先のホストで起動しない場合は両方のホストに対して 接続を行ないます。

  2. 移行対象の VM ゲスト を選んでマウスの右ボタンを押し、 Migrate (移行) を選択します。なお、対象のゲストが 実行中か一時停止の状態になっていることを確認してください。シャットダウン されている場合、移行作業を行なうことができません。

  3. VM ゲスト の移行先を New Host (新しいホスト) を選びます。 移行先として選択したいホストが表示されない場合は、そのホストに対する接続が 確立されているかどうかをご確認ください。

    既定では ライブ マイグレーションが実行されます。 VM ゲスト を移行中に一時停止させる オフライン マイグレーションを 行ないたい場合は、 Migrate offline (オフライン状態で マイグレーションを行なう) を選択します。

  4. 最後に Migrate を押すと、既定のポートと帯域幅を利用して 移行処理が始まります。

    これらの既定値を変更するには、 Advanced Options (高度なオプション) の三角形を押して、高度なオプションを設定してください。 ここでは移行先のホストの Address (アドレス。 IP アドレス またはホスト名) を設定することができるほか、ポート番号 (Port) や帯域幅 (Bandwidth; メガビット毎秒 [Mbps])を設定する ことができます。ポートを設定した場合、 Address にも 値を設定しなければなりません。帯域幅の指定は任意です。

  5. 移行作業が完了すると Migrate (移行) ウインドウが閉じ、 VM ゲスト が Virtual Machine Manager 内の新しい移行先のホスト内に表示されるようになります。 元の VM ゲスト についても移行元のホスト内に残ります (シャットダウン状態に なります) 。

9.1.2. virsh を利用した移行

virsh migrate を利用して VM ゲスト を 移行するには、 VM ホストサーバ に対する直接的または間接的なシェルアクセスが必要です。 これは、このコマンドを実行できるのはホスト側だけであるためです。 基本的に移行作業は下記のようなコマンドを入力して行ないます:

virsh migrate [オプション] 仮想マシンの ID または名前 接続 URI [--migrateuri tcp://ホスト:ポート]

下記では元も重要なオプションについて説明しています。完全な一覧を取得したい 場合は、 virsh help migrate を実行してください。

--live

ライブマイグレーションを実行します。これを指定しない場合、 VM ゲスト は移行作業中に一時停止します。

--suspend

オフラインによるマイグレーションを実行し、移行先のホストでは VM ゲスト の再起動を行ないません。

--persistent

既定では移行された VM ゲスト は一時的な存在で、それらの設定は シャットダウンされたときにホスト上から削除されます。このスイッチを 指定することで、移行作業を恒久化させることができるようになります。

--undefinesource

これを指定した場合、移行が問題なく完了したあとで移行元の VM ゲスト の設定を削除します (ただし、削除するゲストで利用していた仮想ディスク は 削除されません) 。

下記は mercury.example.com を移行元、 jupiter.example.com を移行先のシステムとして利用し、 移行する VM ゲスト は ID が 37 、名称が opensuse11 である場合の例です。

既定のパラメータを利用したオフラインマイグレーション
virsh migrate 37 qemu+ssh://tux@jupiter.example.com/system
既定のパラメータを利用した一時的なライブマイグレーション
virsh migrate --live opensuse11 qemu+ssh://tux@jupiter.example.com/system
恒久的なライブマイグレーション; 移行元の VM 設定を削除する場合
virsh migrate --live --persistent --undefinesource 37 \
qemu+tls://tux@jupiter.example.com/system
ポート 49152 を利用するオフラインマイグレーション
virsh migrate opensuse11 qemu+ssh://tux@jupiter.example.com/system \
--migrateuri tcp://@jupiter.example.com:49152
[Note]一時的なマイグレーションと恒久的なマイグレーション

既定では virsh migrate を実行すると、宛先のホストで VM ゲスト に対する一時的なコピーを作成します。元のゲスト設定の シャットダウン版は、元のホスト上に残ります。一時的なマイグレーション の場合、サーバがシャットダウンすると削除されます。

宛先のホストで恒久的なコピーを作成するには、 --persistent オプションを使用します。この場合も元のゲスト設定に対するシャットダウン版が、 元のホスト上に残ります。 --persistent と共に --undefinesource を指定すると、宛先のホスト上で恒久的な コピーを作成し、元のホスト上にあった設定を削除します。

--persistent 無しで --undefinesource を指定することはお勧めできません。これは宛先のホストでゲストをシャット ダウンしてしまうと、双方で VM ゲスト の設定が消えてしまうためです。

9.2. 監視

9.2.1. Virtual Machine Manager を利用した監視

Virtual Machine Manager を起動して VM ホストサーバ に接続したあとは、すべてのゲストに対して CPU の使用率が表示されるようになります。

CPU 以外にも、このツールではディスクやネットワークの使用率を取得することが できます。なお、これらを取得する際には Preferences (設定) を有効にしなければなりません:

  1. virt-manager を起動します。

  2. Edit+Preferences を選択します。

  3. General から Stats にタブを切り替えます。

  4. Disk I/ONetwork I/O にそれぞれチェックを入れます。

  5. 必要であれば、更新間隔や履歴内に保持するサンプル数などを指定します。

  6. Preferences ダイアログを閉じます。

  7. View+Graph を選択すると、グラフを表示することができます。

上記を行なうことで、ディスクとネットワークの統計情報が Virtual Machine Manager のメイン ウインドウ内にも表示されるようになります。

より正確なデータは、 VNC ウインドウから取得することができます。 VNC ウインドウの開き方については、 5.2項 「グラフィカルコンソールの表示」 をお読みください。ツールバーから Details を選択するか、 View メニューを選択してください。統計情報は 左側のツリーメニュー内の Performance 項目から 表示することができます。

9.2.2. kvm_stat を利用した監視

KVM の性能イベントを追跡するには、 kvm_stat を 利用することができます。このコマンドは /sys/kernel/debug/kvm を監視するため、 debugfs をマウントしておく必要があります。 openSUSE では特に設定しない限りマウントされます。マウントされていない場合は、 下記のコマンドを実行してマウントしてください:

mount -t debugfs none /sys/kernel/debug

kvm_stat は 3 種類のモードを利用することができます:

kvm_stat                    # 1 秒ごとに更新
kvm_stat -1                 # 1 秒分のスナップショット
kvm_stat -l > kvmstats.log  # ログ形式で 1 秒ごとに更新する。
                            # このログは表計算プログラムなどに取り込むことができる

例9.1 kvm_stat の出力例

kvm statistics

 efer_reload                  0       0
 exits                 11378946  218130
 fpu_reload               62144     152
 halt_exits              414866     100
 halt_wakeup             260358      50
 host_state_reload       539650     249
 hypercalls                   0       0
 insn_emulation         6227331  173067
 insn_emulation_fail          0       0
 invlpg                  227281      47
 io_exits                113148      18
 irq_exits               168474     127
 irq_injections          482804     123
 irq_window               51270      18
 largepages                   0       0
 mmio_exits                6925       0
 mmu_cache_miss           71820      19
 mmu_flooded              35420       9
 mmu_pde_zapped           64763      20
 mmu_pte_updated              0       0
 mmu_pte_write           213782      29
 mmu_recycled                 0       0
 mmu_shadow_zapped       128690      17
 mmu_unsync                  46      -1
 nmi_injections               0       0
 nmi_window                   0       0
 pf_fixed               1553821     857
 pf_guest               1018832     562
 remote_tlb_flush        174007      37
 request_irq                  0       0
 signal_exits                 0       0
 tlb_flush               394182     148

これらの値の解釈方法について、詳しくは http://clalance.blogspot.com/2009/01/kvm-performance-tools.html をお読みください。


openSUSE KVM を利用した仮想化 13.1