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

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

この記事を読むのに必要な時間:およそ 2 分

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

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

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

著者プロフィール

阿部純一郎(あべじゅんいちろう)

サーバ管理技術のスペシャリストとして活動。お客様環境に合わせたデータセンターの効率的な管理方法を提案、適用を推進。近年はプライベート・クラウド・コンピューティング環境での活用に注力。


大澤隆(おおさわたかし)

Linux/OSS等のオープン・テクノロジー・スペシャリストとして活動し,システム設計,構築を通じて企業システムへの適用を推進。本年よりオープン・テクノロジーのクラウド・コンピューティング環境での活用に注力。


中井悦司(なかいえつじ)

Linux/OSSを中心とするオープン・テクノロジーのスペシャリスト。近年はプライベート・クラウドの設計・構築に関わりながら,企業システムにおけるクラウド・コンピューティング技術の活用にも注力。

コメント

コメントの記入