ライブマイグレーションの概要
ライブマイグレーションは、仮想マシンを起動したまま、それを実行する物理サーバを移動する技術です。
KVMでライブマイグレーションを行う場合、仮想ディスクイメージを複数の物理サーバで共有する必要があります。手軽な方法としては、NFSサーバを利用して、同一のNFS領域を共有マウントする方法があります。今回はより実践的な例として、図1のようなSAN接続の共有ディスク装置を利用したライブマイグレーション環境を構築します。
共有ディスク上に仮想ディスクイメージを作成するには、次のような方法があります。
- GFS2などの共有ファイルシステムを利用して、仮想ディスクイメージ・ファイルを配置する。
- 物理サーバにアサインしたLUN(論理ディスク)全体を仮想ディスクイメージとして使用する。
- 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を次の内容で作成します。
本来はネットワーク障害時にサーバを強制停止するためのfenceデバイスの設定も必要ですが、ここでは省略しています*1。さらにLVMの設定ファイル/etc/lvm/lvm.confに「locking_type = 3」を指定します。デフォルトでは1が指定されているので、これを修正します。これはCLVMが持つ共有ボリュームのロック機能を利用するためです。最後にlibvirtd、およびクラスタ関連のサービスがサーバ起動時に自動起動しないように設定して、一旦サーバを再起動しておきます。
CLVMの起動と仮想ディスク領域の作成
これ以降の作業は、kvm-host01のみで実施します。
2台のサーバが起動したら次のスクリプトを実行して、クラスタの稼働に必要なサービスを起動します。
これでCLVMが利用できるようになりました。次のコマンドでボリュームグループ(datavg01)を作成してストレージプール(shared01)として登録します。共有LUNのデバイス名/dev/mapper/mpathaは環境に応じて変更してください。
次のコマンドで論理ボリューム(vdisk001)を作成します。最後の10Gは容量の指定です。複数の仮想マシンを作成する場合は、必要な数だけ作成します。
ここで、仮想ディスク領域に/dev/datavg01/vdisk001を指定して、新規の仮想マシンを作成します。virt-managerを利用する場合は、仮想ディスク領域の指定画面で「管理された、又は他の既存のストレージを選択」を選択して、/dev/datavg01/vdisk001を入力します。
ライブマイグレーションの実行
kvm-host01でvirt-managerを起動して、ライブマイグレーション先のサーバ(kvm-host02)を登録します。「ファイル」メニューから「接続を追加」を選択して図2の指定を行います。
これでライブマイグレーションの実行環境が整いました。virt-managerで仮想マシンを右クリックして「移行」を選択すると確認画面が表示されます。ここで「移動」をクリックするとライブマイグレーションが実行されます。
virshコマンドを利用する場合は、マイグレーション元のサーバで次のコマンドを実行します。rhel60vm01は対象の仮想マシンで、kvm-host02はマイグレーション先のサーバです。