Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

CentOS 5.5(64bit)で試すiSCSI環境構築ガイド

長らくご無沙汰しておりました。最近は相変わらず社員教育と品質管理、設計開発作業やインフラエンジニアをしています。

最近、iSCSIを使ったネットワークストレージの話を耳にする事が増えてきました。
NFSより速いとか、GFSを使えばNFSのように使える、など。
早速検証環境を作って試してみたので、その構築記録を公開します。
ベンチマークは後日掲載予定です。

検証環境

【サーバ】

NEC Express5800/iR120a-1E …いわゆるラックマウントサーバ
CPU: Intel Xeon L5520 2.27GHz(Quad) x 2
NIC: Intel Corporation 82571EB Gigabit Ethernet Controller
Mem: 32GB
HDD: SAS 2.5inch 146GB 15krpm x 4 RAID 10
OS: CentOS 5.5(x86_64)

【クライアント】

NEC Express5800/iR120a-1E
CPU: Intel Xeon L5520 2.27GHz(Quad)
NIC: Intel Corporation 82571EB Gigabit Ethernet Controller
Mem: 16GB
HDD: SAS 2.5inch 300GB 10krpm x 2 RAID 1
OS: CentOS 5.5(x86_64)

【ネットワーク】

GigabitのCiscoスイッチングハブにそれぞれぶら下がっています
この2台以外は稼働していないので、スイッチの負荷は掛かっていません。

環境確認

# rpm -qa | grep kernel
kernel-2.6.18-194.8.1.el5
kernel-devel-2.6.18-194.8.1.el5
kernel-headers-2.6.18-194.8.1.el5

rpmをbuild(コマンドがなければ yum -y install rpm-build で入れて下さい)

# rpmbuild -ta iscsitarget-1.4.20.2.tar.gz
…中略…
Wrote: /usr/src/redhat/SRPMS/iscsitarget-1.4.20.2-1.src.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/iscsitarget-1.4.20.2-1.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/kmod-iscsitarget-1.4.20.2-1_2.6.18_194.8.1.el5.x86_64.rpm

もし以下のように文句言われてしまった場合には、メッセージで指示された通りkernel-develをバージョン決めうちでインストールしておいて下さい。(古い必要はありません)

# rpmbuild -ta iscsitarget-1.4.20.2.tar.gz
…中略…
error: Failed build dependencies:
kernel-devel = 2.6.18-194.8.1.el5 is needed by iscsitarget-1.4.20.2-1.x86_64

iSCSIのtargetになる為のプログラムをインストールします

□ こちらは問題なくできた場合

# cd /usr/src/redhat/RPMS/x86_64/ && rpm -ivh iscsitarget* kmod-iscsitarget*
Preparing... ########################################### [100%]
1:kmod-iscsitarget ########################################### [ 50%]
2:iscsitarget ########################################### [100%]

□ 以下は問題が起きた場合
もし、以下の結果となる場合には、利用前にkernelの関連のバージョンを合わせて再起動しておきましょう。
理由としては、インストール時に利用されたkernel-develと、現在読み込まれているkernelとのバージョンが不一致であるから。

# cd /usr/src/redhat/RPMS/x86_64/ && rpm -ivh iscsitarget* kmod-iscsitarget*
Preparing... ########################################### [100%]
1:kmod-iscsitarget ########################################### [ 50%]
modinfo: could not find module /lib/modules/2.6.18-194.8.1.el5/kernel/iscsi/iscsi_trgt.ko
FATAL: /lib/modules/2.6.18-194.8.1.el5/kernel/iscsi/iscsi_trgt.ko: No such file or directory
Warning: Module iscsi_trgt.ko from kernel has no modversions, so it cannot be reused for kernel 2.6.18-194.11.1.el5
2:iscsitarget ########################################### [100%]

※ 現在読み込まれているkernelを確認するには「uname -r」を、インストールされているkernelを確認するには「rpm -qa | grep ker」を実行します

共有するパーティションを選択

今回は/dev/drbd0を使います。(実際はLVMパーティションです)

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-system
30G 2.6G 26G 10% /
/dev/sda1 99M 14M 81M 15% /boot
tmpfs 16G 0 16G 0% /dev/shm
/dev/drbd0 217G 209M 206G 1% /test

設定を "/etc/iet/ietd.conf" に書き込みます。今回は以下の情報で書き込みました。

ADDRESS 192.168.0.104

Target iqn.2010-08.com.example.iscsi01:disk1
Lun 0 Path=/dev/drbd0,Type=fileio
MaxConnections 1

iSCSI Enterprise Target(iSCSIのサーバプロセス)のサービスを起ち上げます

# service iscsi-target start

もしstartしたあと/var/log/messagesに以下のログが出ていた場合

「ADDRESS 192.168.0.104」を "/etc/iet/ietd.conf" に追加して下さい。

Aug 15 21:43:21 s104-unity kernel: iscsi_trgt: Removing all connections, sessions and targets
Aug 15 21:43:22 s104-unity ietd: unable to create server socket (Address family not supported by protocol) 10 1 6!

クライアント側で探索し、その後にログインします

# iscsiadm -m discovery --type sendtargets -p 192.168.0.104
# iscsiadm -m node 192.168.0.104,1 -T iqn.2010-08.com.example.iscsi01:disk1 -l

クライアント側で接続確認をば

iscsiadm -m session -P 3

どのデバイスをマウントするのか以下で確認します

# fdisk -l
Disk /dev/sda: 299.4 GB, 299439751168 bytes
255 heads, 63 sectors/track, 36404 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 36404 292310707+ 8e Linux LVM

Disk /dev/sdb: 236.2 GB, 236215955456 bytes
255 heads, 63 sectors/track, 28718 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table
(以下省略)

既に他のサーバでフォーマット済みのディスクであれば、そのままマウントできます

mkdir -p /mnt/iscsi
mount -t ext3 /dev/sdb /mnt/iscsi/

以上で完了です。意外と簡単ですよね。

それではベンチマークしてみましょう。

読み込み:
# for i in [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12];do sleep 10;echo $'\n\n' $i;hdparm -t /dev/sdb;done

書き込み:
for i in [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12];do sleep 10;echo $'\n\n' $i;date;time dd if=/dev/zero of=/mnt/iscsi/$i.tmp ibs=1M obs=1M count=1024;date;done

他に、bonnie++でのベンチマークも行う予定です。
この結果は次の記事で発表します。

ログアウトはこのやり方で

# iscsiadm -m node 192.168.0.104,1 -T iqn.2010-08.com.example.iscsi01:disk1 --logout
Logging out of session [sid: 4, target: iqn.2010-08.com.example.iscsi01:disk1, portal: 192.168.0.104,3260]
Logout of [sid: 4, target: iqn.2010-08.com.example.iscsi01:disk1, portal: 192.168.0.104,3260]: successful

注意

ext3はGFS(GlobalFileSystem)やOCFS2(Oracle Cluster File System)と違って共有ファイルシステムではないので、複数台のマシンにマウントしてしまうとデータが壊れる可能性があります。
もしNFSのように使いたい場合には、CentOSなら以下のサイトで紹介されているOCFS2や、GFSなどの分散ファイルシステムを使いましょう。
http://bitstar.jp/blog/?p=1350
http://bitstar.jp/blog/?p=1600