iSCSI環境構築メモ

自分用メモ。


まずiSCSIを全く知らないので、軽くwikiを眺める。
http://ja.wikipedia.org/wiki/ISCSI


鯖1台にしか作らないのでうまみがあんまりないんだけど。
iSCSIストレージを提供する側(target)と、iSCSIストレージを利用する側(initiator)でそれぞれ設定が必要

iSCSI target

まずはtargetから。
LinuxではiSCSI Target Enterpriseってのがメジャーらしい。


yumリポジトリからさくっと入れることもできるのだけど、
なんとなくプロジェクトから一番新しいのを引っ張ってくる。

# updateはしておきましょう
yum -y update

# gccとかopensslとかdevelとか必要。
yum -y install svn
yum -y install kernel-devel
yum -y install patch
yum -y install make
yum -y install gcc
yum -y install openssl-devel

# ここで1回再起動する必要があるかもしれない

cd /usr/local/src
svn co https://iscsitarget.svn.sourceforge.net/svnroot/iscsitarget iscsitarget 

cd iscsitarget/trunk
make
make install

# サービス自動起動設定
chkconfig iscsi-target on


早速使おうと思ったけど使う領域を作ってなかった。
今回はあまり関係ないので、おまけ扱いにする。
RAIDで /dev/md0 なデバイスを作ったとする。


次に設定。以下のファイルをいじる。デフォルトで全部コメントアウトされていた。

vi /etc/iet/ietd.conf

識別子は好きに書いてよさげだけど、コメントにはちゃんとこうやって書いてね、と書いてある。

iqn.yyyy-mm.[:identifier]

yyyy-mmはドメインを取得した日付らしい。
reversed domain nameは「rying.net」なら「net.rying」とするべきらしい。
identifierは任意。今回はvol0にする。
ついでに簡単に認証もかけておきます。パスワードは12桁でないとだめ。
MaxConnectionsは同時接続数で、普通は"1"です。
iscsiを使ってファイル共有とか同時接続数を増やしたいなら、増やします。機能するか知りませんが。

Target iqn.2012-11.net.rying.win-iscsi:win-iscsi
	Lun 0 Path=/dev/md0p1,Type=fileio
	IncomingUser ryozi 123456789012
	MaxConnections 8
Target iqn.2012-11.net.rying.iscsi:iscsi
	Lun 0 Path=/dev/md1,Type=fileio
	IncomingUser ryozi 123456789012
	MaxConnections 8

そしてrestart

[root@localhost ~]# service iscsi-target start
Starting iSCSI Target: FATAL: Error inserting crc32c_intel (/lib/modules/2.6.32-279.11.1.el6.x86_64/kernel/arch/x86/crypto/crc32c-intel.ko): No such device
                                                           [  OK  ]

OKとか出てるけど、なんかマズそうなエラー。
こいつを出さないようにするには、起動スクリプトをちょっといじる。

vi /etc/init.d/iscsi-target 


以下の行をコメントアウト

modprobe -q crc32c

大丈夫なんかな...


あとはiptablesをいじって、TCP:3260を開放して完了。

iSCSI Initiator

次に設定。作ったiSCSI targetを読みに行くためのiSCSI initiator。
LinuxではOpen-iSCSIがホットらしい。


何か、以下の2つがないと「/usr/bin/ld: cannot find -lc」と出てだめだったので入れておく。cライブラリ関係だろう。

yum -y install glibc-utils
yum -y install glibc-static

cd /usr/local/src
wget http://www.open-iscsi.org/bits/open-iscsi-2.0-873.tar.gz
tar xzf open-iscsi-2.0-873.tar.gz
cd open-iscsi-2.0-873

# README に色々書いてあるので読むと良い。僕は英語読めないからあきらめた。

make
make install

# サービス自動起動設定
chkconfig open-iscsi on

installは終わった。次に設定に入っていく。

まずtargetを見つける。同じサーバ内にあるので、自身のIPで探す。

iscsiadm -m discovery -t sendtargets -p 192.168.0.XXX

192.168.0.XXX:3260,1 iqn.2012-11.net.rying.iscsi:iscsi
192.168.0.XXX:3260,1 iqn.2012-11.net.rying.win-iscsi:win-iscsi


設定したときのtargetのiqnが見えますね。うまく見つけられたようです。
見つけると設定ファイルが下記の場所につくられるので、パスワード設定をしておきます。

cd /etc/iscsi/nodes/
cd iqn.2012-11.net.rying.iscsi:iscsi/ # 見つけたiqn
cd 192.168.0.253,3260,1/ # 検索したときのIPとPortとか
vi default

# targetでパスワードを設定しているので以下を追加
node.session.auth.authmethod = CHAP
node.session.auth.username = ryozi
node.session.auth.password = 123456789012


使わないnodeは削除しても問題なさそう?

cd /etc/iscsi/nodes/
rm -rf "iqn.2012-11.net.rying.win-iscsi:win-iscsi"

initiatorサービスを再起動(起動してないならstart)

service open-iscsi restart

こんなログが出たらOKっぽい。

Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2012-10.net.rying:vol0, portal: 192.168.0.XXX,3260] (multiple)
Login to [iface: default, target: iqn.2012-10.net.rying:vol0, portal: 192.168.0.XXX,3260] successful.


iSCSIで繋がっているドライブを認識しているか調べる。

fdisk -l

...中略...

ディスク /dev/sdf: 2000.4 GB, 2000397746176 バイト
ヘッド 255, セクタ 63, シリンダ 243201
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

このディスクが増えてました。こいつがソレっぽいです。
後は初期化してマウントして自由に使うだけ。


ただ環境が変わったりすると、マウントされるデバイスの位置がかわるっぽい(?)ので、
udevで実デバイスに割り当てるLinux上のデバイス名を固定するとよいらしい。
参考: 強欲と未練: CentOS5におけるudevを用いたiSCSIのデバイス名固定 とパーティションノードの作成に関して

おまけ

サービスの起動順序の関係で、iscsi-targetよりもopen-iscsiが先に起動する。
iscsi-target起動してない状態でopen-iscsiサービスを立ち上げようとすると、コネクションエラーになり、接続できない。

[root@localhost ~]# cat /etc/init.d/iscsi-target | grep chkconfig
# chkconfig: - 39 35
[root@localhost ~]# cat /etc/init.d/open-iscsi | grep chkconfig
# chkconfig: 345 13 89

iscsi-targetの起動番号が39、open-iscsiの起動番号が13なので、
open-iscsiの起動番号を40以上にしてやる必要がある。

sed -i 's/# chkconfig: 345 13 89/# chkconfig: 345 40 89/' /etc/init.d/open-iscsi
chkconfig --del open-iscsi # 登録しなおすため一度削除
chkconfig --add open-iscsi

[root@localhost ~]# ls -l /etc/rc.d/rc3.d/ | grep iscsi
lrwxrwxrwx. 1 root root 16 11月 4 22:55 2012 S07iscsid -> ../init.d/iscsid
lrwxrwxrwx. 1 root root 15 11月 5 01:13 2012 S13iscsi -> ../init.d/iscsi
lrwxrwxrwx. 1 root root 22 11月 5 01:25 2012 S39iscsi-target -> ../init.d/iscsi-target
lrwxrwxrwx. 1 root root 20 11月 5 02:46 2012 S40open-iscsi -> ../init.d/open-iscsi

S39iscsi-target、S40open-iscsi となっているのでOK。

Windowsで使う

iscsiイニシエータはWindows7ならたぶん入ってると思う。(Ultimateだからかも)
無くても無償でget出来るらしい。
コントロールパネル→管理ツール→iscsiイニシエータを開いて、
iSCSIの設定をした鯖のIPを打つ。
ターゲットに先ほどのiSCSI targetが出てくるので、選択して接続。
その後に表示されたウィンドウ内にある、詳細設定より、
「CHAPログオンを有効にする」にチェックを入れ、
名前にryozi, ターゲットシークレットに123456789012を指定。
後はHDDを増設したときのように、ディスク管理のとこに出てくるので、ドライブ文字を割り当てて、フォーマットして完了。


ベンチマークもとってみた。

-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2012 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :    98.820 MB/s
          Sequential Write :    58.041 MB/s
         Random Read 512KB :    92.393 MB/s
        Random Write 512KB :    44.489 MB/s
    Random Read 4KB (QD=1) :     8.359 MB/s [  2040.7 IOPS]
   Random Write 4KB (QD=1) :     0.948 MB/s [   231.5 IOPS]
   Random Read 4KB (QD=32) :    91.999 MB/s [ 22460.6 IOPS]
  Random Write 4KB (QD=32) :     1.224 MB/s [   298.8 IOPS]

  Test : 1000 MB [W: 0.0% (0.1/931.5 GB)] (x3)
  Date : 2012/11/05 2:03:15
    OS : Windows 7 Ultimate Edition SP1 [6.1 Build 7601] (x64)