第13章 DRBDとXenの使用

目次

13.1. Xenの基礎
13.2. Xenとともに使用するためにDRBDモジュールパラメータを設定する
13.3. Xen VBDとして適切なDRBDリソースを作成する
13.4. DRBD VBDの使用
13.5. DRBDで保護されたdomUの開始、停止、移行
13.6. DRBDとXen統合の内部
13.7. XenとPacemakerの統合

この章では、Xenハイパーバイザを使用する仮想化環境のVBD (Virtual Block Device: 仮想ブロックデバイス)としてDRBDを使用する方法を説明します。

13.1. Xenの基礎

Xenはケンブリッジ大学(英国)で開発された仮想化フレームワークで、その後はXenSource, Inc. (現在はCitrix傘下)が維持管理しています。Debian GNU/Linux (バージョン4.0以降)、SUSE Linux Enterprise Server (リリース10以降)、Red Hat Enterprise Linux (リリース5)など、ほとんどのLinuxディストリビューションの比較的新しいリリースにはXenが含まれています。

Xenでは準仮想化が使用されます。これは、仮想化ホストとゲスト仮想マシンの高度な協調を必要とする仮想化方式です。従来のハードウェアエミュレーションにもとづく仮想化ソリューションよりも高いパフォーマンスを実現します。適切な仮想化拡張機能をサポートするCPUの場合、Xenは完全なハードウェアエミュレーションもサポートします。これはXenの用語ではHVM (「Hardware-assisted Virtual Machine: ハードウェア支援仮想マシン」)と呼ばれます。

[注記]注記

本書の執筆時点で、XenがHVM用にサポートするCPU拡張機能はIntelのVirtualization Technology (VT、以前のコードネームは「Vanderpool」)およびAMDのSecure Virtual Machine (SVM、以前の「Pacifica」)です。

Xenは ライブマイグレーション をサポートします。これは、実行中のゲストオペレーティングシステムを1つの物理ホストからもう1つへ中断なく転送する機能です。

DRBDリソースをレプリケートされたXen用仮想ブロックデバイス(VBD)として設定すると、2つのサーバの両方でdomUの仮想ディスクとして使えます。さらに自動フェイルオーバさせることも可能になります。このように、DRBDは、仮想化以外の他の用途と同様に、Linuxサーバに冗長性を提供するだけでなく、Xenによって仮想化できる他のオペレーティングシステムにも冗長性を提供します。これには32ビットまたは64ビットIntel互換アーキテクチャで実行可能な実質上すべてのオペレーティングシステムが含まれます。

13.2. Xenとともに使用するためにDRBDモジュールパラメータを設定する

Xen Domain-0カーネルの場合は、disable_sendpage1 に設定してDRBDモジュールをロードすることをお勧めします。ファイル /etc/modprobe.d/drbd.conf を作成するか開いて、次の行を入力します。

options drbd disable_sendpage=1

13.3. Xen VBDとして適切なDRBDリソースを作成する

Xenの仮想ブロックデバイスとして使用するDRBDリソースの設定は比較的簡単です。基本的には、他の目的に使用するDRBDリソースの構成とほぼ同様です。ただし、ゲストインスタンスのライブマイグレーションを有効にしたい場合は、そのリソースのデュアルプライマリモードを有効にする必要があります。

resource <resource> {
  net {
    allow-two-primaries yes;
    ...
  }
  ...
}

デュアルプライマリモードを有効にするのは、Xenがライブマイグレーションを開始する前にすべてのVBDの書き込みアクセスをチェックするためです。リソースは、移行元ホストと移行先ホストの両方で使用されるように設定されます。

13.4. DRBD VBDの使用

DRBDリソースを仮想ブロックデバイスとして使用するには、Xen domU設定に次のような行を追加する必要があります。

disk = [ 'drbd:<resource>,xvda,w' ]

この設定例では、resource という名前のDRBDリソースを読み取り/書きみモード(w)で /dev/xvda としてdomUで使用できるようにします。

もちろん、複数のDRBDリソースを単一のdomUで使用することもできます。その場合は、上記の例のように、コンマで区切って disk オプションにさらに項目を追加します。

[注記]注記

ただし、次に示す3つの状況ではこの方法を使用できません。

  • 完全に仮想化された(HVM) domUを構成する場合
  • グラフィカルインストールユーティリティを使用してdomUをインストールし、さらに そのグラフィカルインストーラが drbd: 構文をサポートしない場合。
  • kernelinitrdextra オプションを指定せずにdomUを構成し、代わりに bootloaderbootloader_args によりXen擬似ブートローダを使用するように指定し、さらにこの擬似ブートローダが drbd: 構文をサポートしない場合。

    • pygrub (Xen 3.3より前)および domUloader.py (SUSE Linux Enterprise Server 10のXenに同梱)は、仮想ブロックデバイス構成の drbd: 構文をサポートしない擬似ブートローダの例です。
    • Xen 3.3以降の pygrub およびSLES 11に同梱される domUloader.py のバージョンはこの構文を サポートします

このような場合は、従来の phy: デバイス構文、およびリソース名ではなく、リソースに関連付けられたDRBDデバイス名を使用する必要があります。ただし、この場合はDRBDの状態遷移をXenの外部で管理する必要があるため、drbd リソースタイプを使用する場合より柔軟性が低下します。

13.5. DRBDで保護されたdomUの開始、停止、移行

domUの開始. DRBDで保護されたdomUを設定したら、通常のdomUと同様に開始できます。

xm create <domU>
Using config file "+/etc/xen/<domU>+".
Started domain <domU>

このとき、VBDとして設定したDRBDリソースは、プライマリロールに昇格され、通常どおりにXenにアクセスできるようになります。

domUの停止. これも同様に簡単です。

xm shutdown -w <domU>
Domain <domU> terminated.

この場合も、domUが正常にシャットダウンされると、DRBDリソースがセカンダリロールに戻ります。

domUの移行. これも通常のXenツールで実行します。

xm migrate --live <domU> <destination-host>

この場合、短時間に連続して複数の管理ステップが自動的に実行されます。

  1. destination-host のリソースがプライマリロールに昇格されます。
  2. domU のライブマイグレーションがローカルホストで開始します。
  3. 移行先ホストへの移行が完了すると、ローカル側でリソースがセカンダリロールに降格されます。

最初にリソースをデュアルプライマリモードに設定するのは、両方のリソースを短時間だけ両方のホストでプライマリロールとして実行する必要があるためです。

13.6. DRBDとXen統合の内部

Xenはネイティブで次のタイプの仮想ブロックデバイスをサポートします。

phyこのデバイスタイプは、ホスト環境で使用可能な「物理的な」ブロックデバイスをゲストdomUに基本的には透過的な方法で渡します。

fileこのデバイスタイプは、ファイルベースのブロックデバイスイメージをゲストdomUで使用するためのものです。元のイメージファイルからループブロックデバイスを作成し、このブロックデバイスを phy デバイスタイプとほぼ同じ方法でdomUに渡します。

domU構成の disk オプションで設定された仮想ブロックデバイスが phy:file: 以外の接頭辞を使用する場合、または接頭辞をまったく使用しない場合(この場合はXenのデフォルトの phy デバイスタイプが使用される)は、Xenスクリプトディレクトリ(通常は/etc/xen/scripts)にある block - prefix というヘルパースクリプトが使用されます。

DRBD はdrbdデバイスタイプ用のスクリプト(/etc/xen/scripts/block-drbd)を提供しています。この章の前半で述べたように、このスクリプトは必要に応じてDRBDリソースの状態遷移を制御します。

13.7. XenとPacemakerの統合

DRBDで保護されるXen VBDのメリットを十分に活用するためにheartbeatを使用し、関連するdomUをheartbeatリソースとして管理することをお勧めします。

Xen domUをPacemakerリソースとして構成し、フェイルオーバを自動化することができます。これには Xen OCFリソースエージェントを使用します。この章で説明したXenデバイスタイプとして drbd を使用している場合は、Xenクラスタリソースで使用するために個別にdrbdリソースを設定する必要は ありませんblock-drbd ヘルパースクリプトによって必要なリソース移行がすべて実行されます。