レベル: 中級 Andreas Breitfeld, IBM Informix Development, IBM Deutschland Entwicklung GmbH
2009年 03月 05日 IBM® Informix® Dynamic Server (IDS) Version 11.50 用の真の共有ディスクを構成する方法を学びましょう。この記事では IDS の SD (Shared Disk) セカンダリー・サーバーを Ubuntu Linux® 上にセットアップして稼働させる方法を説明します。ここで説明する方法は他の Linux ディストリビューションにも容易に応用することができます。
はじめに
IBM Informix Dynamic Server (IDS) のバージョン 11.50.xC1 から実装されるようになった、MACH 11 (Multi-node Active Cluster for High Availability) という機能には、一連の高可用性機能やクラスタリング機能が含まれており、SD (Shared Disk) セカンダリー・サーバーのサポートもそうした機能の 1 つです。SD セカンダリー・サーバーはプライマリー・サーバーとディスクを共有しますが、物理的なデータベースのコピーを保持するわけではありません。この記事では、Ubuntu Linux 上で真の共有ディスクと SD セカンダリー・サーバーのサンプル構成を作成する方法について説明します。ここで説明する手順に従うことで、皆さんがお使いの共有ディスクと SD セカンダリー・サーバーを Ubuntu Linux 上でカスタマイズできるようになるはずです。
この記事では、このサンプル構成の背景情報、サンプル構成を作成するための要件、そしてサンプル構成を作成する方法について説明します。
背景情報
この記事で説明するサンプル構成では、iSCSI (Internet SCSI) SAN (Storage Area Network) を使って IDS 用の共有ディスクを提供します。なぜ他の方法ではなく iSCSI を選択したかを簡単に説明すると以下のとおりです。
IDS MACH 11 の機能を利用するためには、複数の IDS インスタンスが共有チャンクに対して同時にアクセスできる必要があります。それができると、複数のマシンで同時に IDS インスタンスを実行することができます。ファイルシステム (cooked device) に保存されたチャンクの場合、複数の IDS インスタンスが同時にアクセスするためのソリューションとしては、クラスター・ファイルシステム (GFS や OCFS など) を使う方法があります。ディスク・デバイス (Raw デバイス) に保存されたチャンクの場合には SAN があります (ファイバー・チャネルや iSCSI など)。IDS のオペレーションにクラスター・ファイルシステムを使用するとパフォーマンスや管理の面で不必要なオーバーヘッドが発生するため、この記事ではチャンクの保存手段として SAN を使います。
FC (Fibre Channel: ファイバー・チャネル) は SAN を実現するためのハイパフォーマンスの技術として有名です。FC を利用すれば通常 FC リンク当たり 100MB/s から 400MB/s の帯域幅を実現することができ、800MB/s の帯域幅も既に実現されています。しかし、FC を使って SAN を実現する方法は比較的複雑で高価です。
帯域幅に対する要求が低いアプリケーションでは、iSCSI (Internet SCSI) を使って SAN を実現することができます。iSCSI の場合、SCSI コマンドは標準的な 1000BASE-T (ギガビット・イーサネット) ネットワーク上に送信され、これは理論的にギガビット・イーサネット・リンク当たり 125MB/s の帯域幅が得られるということです。10 ギガビット・イーサネットでも、より大きな帯域幅を得ることができます。iSCSI SAN は一般的で標準的なコンポーネントをベースにするため、比較的単純で安価です。テストや開発のための環境では、この単純で安価という特徴は重要な利点です。
要件
下の図はサンプル構成のネットワーク構造を示しています。
図 1. サンプル構成のネットワーク構造
このサンプル構成では、Ubuntu 8.04 LTS Server Edition が 3 台の標準的なPC (マシン) にインストールされています。複数のディスクを持つマシン (ラベルは Piero) は専用ディスク・アレーとして動作します。他の 2 台は両方とも IDS 11.50.UC2DE を実行します。1 台はプライマリー・サーバー (ラベルは mach1) であり、もう 1 台は SD セカンダリー・サーバー (ラベルは mach2) です。
既存のギガビット・イーサネット・アダプターはギガビット・イーサネット・スイッチに接続されており、プライベート IP アドレスを持っています。このプライベート・ネットワークは iSCSI データ (SAN) 専用に予約されています。ネットワーク・コンポーネントはジャンボ・フレーム (MTU=9000) もサポートする必要があります。Ubuntu の場合、そのためには /etc/network/interfaces ファイルの中で SAN のギガビット・イーサネット・アダプターに対して mtu 9000 オプションを追加します。ifconfig コマンドを使うと MTU の現在の設定を見ることができます。
各マシンには LAN に接続された別のイーサネット・アダプターがあります。
iSCSI を構成する
このセクションでは、サンプル構成用に iSCSI を構成する方法を説明します。
注: Ubuntu 8.04 以外の Linux ディストリビューション (Red Hat や SUSE など) の場合も、この記事と同様の構成を作成できるはずです。特に Red Hat Enterprise Linux 5 には、iSCSI ターゲットをセットアップするための (tgt プロジェクトをベースとする) scsi-target-utils パッケージが用意されています。
ターゲット・マシンに iscsitarget をインストールする
SAN の中で、ディスクを提供するマシンはターゲットと呼ばれます。SAN のターゲット・マシンに Ubuntu の iscsitarget パッケージ (iSCSI Enterprise Target userland ツール) をインストールします。
iSCSI Enterprise Target Daemon を構成する
ターゲット・マシンの /etc/ietd.conf ファイル (iSCSI Enterprise Target Daemon) の中で、どのディスクまたはパーティションを共有するのかを指定します。下記はその一例です。
Target iqn.2008-07.com.ibm.munich.target:shared.disk1
Lun 0 Path=/dev/sda5,Type=blockio
|
上記の例では、iqn.2008-07.com.ibm.munich.target:shared.disk1 はターゲットとなるディスクのシンボリック名です。Type=blockio はディスクをページ・キャッシュなしの直接のブロック I/O モードに設定します。
/etc/ietd.conf を変更した後、iSCSI Enterprise Target Daemon を再起動して変更を有効にする必要があります。
/etc/init.d/iscsitarget restart
|
あるいは、ietadm (iSCSI Enterprise Target Administration Utility) コマンドを使うと再起動せずに動的に構成を変更することができます。
アクティブな構成は /proc/net/iet/volume ファイルと /proc/net/iet/session ファイルを見るとわかります。
イニシエーター・マシンに open-iscsi をインストールする
SAN の中で、ディスクにアクセスするマシンはイニシエーターと呼ばれます。Ubuntu の open-iscsi パッケージ (ハイパフォーマンスでトランスポートに依存しない iSCSI 実装) を各イニシエーター・マシンにインストールします。
サンプル構成の場合、iscsid (Open-iSCSI デーモン) のデフォルト値は変更しません。iscsid の構成は /etc/iscsi/iscsid.conf ファイルの中で定義します。
イニシエーターがアクセスするディスクを指定する
イニシエーターがどのディスクにログインするのかを iscsiadm コマンドを使って指定します。
ターゲット・マシンの IP アドレスを指定してターゲット・ディスクを見つけます。
iscsiadm --mode discovery --type sendtargets --portal 192.168.0.100
|
見つかったノードのレコードをリストアップします。
ノード・レコードの startup 値を automatic に設定します。(startup 値のデフォルトは /etc/iscsi/iscsid.conf の中で manual に設定されています。) 個々のノード・レコードに対して startup 値を設定することもでき、あるいはすべてのノード・レコードに対して startup 値を設定することもできます。ノード・レコードが見つかるごとに startup 値を設定することを忘れないでください。
下記は個々のノードに対して startup 値を設定する例を示しています。
iscsiadm -m node --targetname iqn.2008-07.com.ibm.munich.target:shared.disk1 \
--op=update --name=node.startup --value=automatic --portal 192.168.0.100
|
下記はすべてのノード・レコードに対して startup 値を設定する例を示しています。
iscsiadm -m node --op=update --name=node.startup --value=automatic \
--portal 192.168.0.100
|
下記のように、startup 値が automatic のすべてのターゲットにログインします (リブートすると、ログインは自動的に行われます)。
iscsiadm --mode node --portal 192.168.0.100 --loginall automatic
|
永続的なデバイス・パスを定義する
この時点でカーネルから通常どおり新しいディスクが見えるようになりますが、デバイスとターゲット名のマッピングを /proc/partitions の中で区別することはできません。従って永続的なデバイス・パスを使用する必要があります。このパスは udev (動的デバイス管理) によって自動的に生成されます。下記はその一例です。
/dev/disk/by-path/\
ip-192.168.0.100:3260-iscsi-iqn.2008-07.com.ibm.munich.target:\
shared.disk1-lun-0
|
通常と同じようにパーティションを設定します。下記はその一例です。
fdisk /dev/disk/by-path/\
ip-192.168.0.100:3260-iscsi-iqn.2008-07.com.ibm.munich.target:\
shared.disk1-lun-0
|
パーティション 1 のパスは次の通りです。
/dev/disk/by-path/\
ip-192.168.0.100:3260-iscsi-iqn.2008-07.com.ibm.munich.target:\
shared.disk1-lun-0-part1
|
複数のイニシエーターから同じターゲット名へのログインが行われると、同じパスを持つブロック・デバイスとして共有ディスク・パーティションが提供されます。
IDS を構成する
このセクションでは、サンプル構成に対して IDS を構成する方法を説明します。
Ubuntu パッケージをインストールする
プライマリー・サーバーとなるマシン (mach1) と SD セカンダリー・サーバーとなるマシン (mach2) の両方の Ubuntu 8.04 オペレーティング・システムに以下のパッケージをインストールします。
- bc
- gcc-3.3-base
- libaio1
- libstdc++5
- pdksh
- rpm
アクセス権を設定する
IDS ではチャンクに対する特定のアクセス権を必要とします。このステップでは、共有ディスクとローカル・ディスクに対する特定のアクセス権を udev を使って設定します。
/etc/udev/rules.d/99-informix-permissions.rules という名前の新しいルール・ファイルを作成します。このファイルによって共有ディスクとローカル・ディスクに対するアクセス権を定義します。下記はその一例です。
###
# iSCSI shared disks by-path
ENV{DEVTYPE}=="disk", IMPORT{program}="path_id %p"
ENV{DEVTYPE}=="partition",
ENV{ID_PATH}=="ip-192.168.0.100:3260-iscsi-iqn.2008-07.com.ibm.munich.target:\
shared.disk*", OWNER="informix", GROUP="informix", MODE="0660"
# local disks
KERNEL=="sda7", OWNER="informix", GROUP="informix", MODE="0660"
###
|
このルールを有効にするためには、udevtrigger コマンドを使うか、あるいはリブートします。
また、シンボリック・リンクを使ってデバイスに対する単純なパスを作成することをお勧めします。下記はその一例です。
/home/informix/chunks/shared.disk1 -> /dev/disk/by-path/\
ip-192.168.0.100:3260-iscsi-iqn.2008-07.com.ibm.munich.target:\
shared.disk1-lun-0-part1
|
IDS インスタンスを作成して構成する
プライマリー・サーバーとなるマシン (mach1) と SD セカンダリー・サーバーとなるマシン (mach2) に IDS のインスタンスを作成します。
両方のマシンで、ONCONFIG ファイルの ROOTPATH パラメーターを同じ共有ディスクに設定します。
ROOTPATH /home/informix/chunks/shared.disk1
|
また、両方のマシンの INFORMIXSQLHOSTS ファイルを更新し、この 2 台のマシン間で通信を行うためのエントリーを含めます。
demo_on onsoctcp mach1 9088
demo_on_sds1 onsoctcp mach2 9088
|
SD セカンダリー・サーバー・マシンの場合のみ、ONCONFIG ファイルに下記のエントリーを追加します。
SDS_ENABLE 1
SDS_TEMPDBS sds1temp,/home/informix/chunks/sds1temp,2,0,2048
SDS_PAGING /home/informix/chunks/sds1page1,/home/informix/chunks/sds1page2
|
IDS インスタンスを起動する
プライマリー・サーバー (mach1) の IDS インスタンスを下記のコマンドで初期化します。
mach1 マシンの IDS を初期化したら、このマシンをプライマリー・サーバーとして指定します。
onmode -d set SDS primary demo_on
|
SD セカンダリー・サーバー (mach2) の IDS インスタンスを下記のコマンドで起動します。
各インスタンスの状態は下記のコマンドでチェックすることができます。
まとめ
この記事で説明した構成は IDS で驚くほど高いパフォーマンスを示しました。単純化した TPC-B ベンチマークを実行する間、ローカル・ディスクと共有ディスクとの間に大きな違いは見られませんでした。
この記事では、IDS の SD セカンダリー・サーバーをセットアップして稼働させるための方法として、特定のバージョンの Ubuntu Linux 上で iSCSI 共有ディスクをセットアップして構成する方法について説明しました。この記事で説明した手順は Linux オペレーティング・システムの他のディストリビューションに応用するためのガイドとしても使用することができるはずです。
参考文献 学ぶために
製品や技術を入手するために
議論するために
著者について  | 
|  | Andreas Breitfeld はソフトウェア開発者であり、IBM Informix Database Server の業務を数年間行ってきています。彼は IDS のポーティングや開発のさまざまなステージに関係してきました。 |
記事の評価
|