KVMで始めるプライベート・クラウドへの第一歩

第6回KVMでライブマイグレーションに挑戦

ライブマイグレーションの概要

ライブマイグレーションは、仮想マシンを起動したまま、それを実行する物理サーバを移動する技術です。

KVMでライブマイグレーションを行う場合、仮想ディスクイメージを複数の物理サーバで共有する必要があります。手軽な方法としては、NFSサーバを利用して、同一のNFS領域を共有マウントする方法があります。今回はより実践的な例として、図1のようなSAN接続の共有ディスク装置を利用したライブマイグレーション環境を構築します。

図1 共有ディスク構成
図1 共有ディスク構成

共有ディスク上に仮想ディスクイメージを作成するには、次のような方法があります。

  1. GFS2などの共有ファイルシステムを利用して、仮想ディスクイメージ・ファイルを配置する。
  2. 物理サーバにアサインしたLUN(論理ディスク)全体を仮想ディスクイメージとして使用する。
  3. CLVM(クラスタ論理ボリュームマネージャ)を利用して、LUN上に作成した論理ボリュームを仮想ディスクイメージとして使用する。

ここでは、管理の容易性とパフォーマンスの両立ができる3の方法を採用します。CLVMを利用するにはクラスタ環境を構成する必要があります。RHEL6の場合は、Resilient Storageアドオンを利用します。

CLVMの構成

ここで説明する作業は、図1の2台のサーバで共通に実施します。共有LUNがそれぞれのホストOS(RHEL6)から正しく認識されているものとします。ホスト名「kvm-host01」⁠kvm-host02」は環境に応じて読み替えてください。

はじめに、それぞれのサーバのrootユーザが互いにパスワード入力なしでSSH接続できるように公開鍵認証の設定を行います。必須ではありませんが、クラスタの管理操作を容易にするためのものです。さらに、サーバの名前解決が確実にできるようにhostsファイルにそれぞれのサーバのエントリを記載しておきます。また、NTPを利用してサーバの時刻同期を行っておきます。

続いて、⁠高可用性(HighAvailability⁠⁠」および「レジリエントストレージ(ResilientStorage⁠⁠」のレポジトリに含まれる「高可用性(High Availability⁠⁠」と「レジリエントストレージ(Resilient Storage⁠⁠」のパッケージグループを導入した後に、クラスタ構成ファイル/etc/cluster/cluster.confを次の内容で作成します。

<?xml version="1.0"?>
<cluster config_version="1" name="cluster01">
    <clusternodes>
      <clusternode name="kvm-host01" nodeid="1" votes="1">
      </clusternode>
      <clusternode name="kvm-host02" nodeid="2" votes="1">
      </clusternode>
    </clusternodes>
  <cman two_node="1" expected_votes="2"/>
</cluster>

本来はネットワーク障害時にサーバを強制停止するためのfenceデバイスの設定も必要ですが、ここでは省略しています*1。さらにLVMの設定ファイル/etc/lvm/lvm.confに「locking_type = 3」を指定します。デフォルトでは1が指定されているので、これを修正します。これはCLVMが持つ共有ボリュームのロック機能を利用するためです。最後にlibvirtd、およびクラスタ関連のサービスがサーバ起動時に自動起動しないように設定して、一旦サーバを再起動しておきます。

# chkconfig libvirtd off
# chkconfig libvirt-guests off
# chkconfig cman off
# chkconfig clmvd off
# reboot
*1
この他にも設定上のさまざまな考慮点がありますので、本番環境でCLVMを使用する際はRedHat社のサポートサービスの利用なども検討してください。

CLVMの起動と仮想ディスク領域の作成

これ以降の作業は、kvm-host01のみで実施します。

2台のサーバが起動したら次のスクリプトを実行して、クラスタの稼働に必要なサービスを起動します。

#!/bin/sh
ssh kvm-host01 "service cman start" &
ssh kvm-host02 "service cman start" &
wait
ssh kvm-host01 "service clvmd start" &
ssh kvm-host02 "service clvmd start" &
wait
ssh kvm-host01 "service libvirtd start" &
ssh kvm-host02 "service libvirtd start" &
wait

これでCLVMが利用できるようになりました。次のコマンドでボリュームグループ(datavg01)を作成してストレージプール(shared01)として登録します。共有LUNのデバイス名/dev/mapper/mpathaは環境に応じて変更してください。

# pvcreate /dev/mapper/mpatha
# vgcreate datavg01 /dev/mapper/mpatha
# virsh pool-define-as shared01 logical - - /dev/mapper/mpatha datavg01 /dev/datavg01
# virsh pool-autostart shared01
# virsh pool-start shared01

次のコマンドで論理ボリューム(vdisk001)を作成します。最後の10Gは容量の指定です。複数の仮想マシンを作成する場合は、必要な数だけ作成します。

# virsh vol-create-as shared01 vdisk001 10G

ここで、仮想ディスク領域に/dev/datavg01/vdisk001を指定して、新規の仮想マシンを作成します。virt-managerを利用する場合は、仮想ディスク領域の指定画面で「管理された、又は他の既存のストレージを選択」を選択して、/dev/datavg01/vdisk001を入力します。

ライブマイグレーションの実行

kvm-host01でvirt-managerを起動して、ライブマイグレーション先のサーバ(kvm-host02)を登録します。⁠ファイル」メニューから「接続を追加」を選択して図2の指定を行います。

図2 virt-managerのサーバ登録
図2 virt-managerのサーバ登録

これでライブマイグレーションの実行環境が整いました。virt-managerで仮想マシンを右クリックして「移行」を選択すると確認画面が表示されます。ここで「移動」をクリックするとライブマイグレーションが実行されます。

virshコマンドを利用する場合は、マイグレーション元のサーバで次のコマンドを実行します。rhel60vm01は対象の仮想マシンで、kvm-host02はマイグレーション先のサーバです。

# virsh migrate --live rhel60vm01 qemu+ssh://root@kvm-host02/system

おすすめ記事

記事・ニュース一覧