2007年 1月 26日 金曜日
やっぱり Sun がスキ!
Solaris iSCSI Target/Initiator
Solaris でも iSCSI Target/Initiator が構築できることをご存知ですか?
実は、Nevada build 7 (Nevada は、次期 Solaris の開発コードネームです)では、Solaris iSCSI Initiator が実装され Solaris 10 3/05 HW2 リリースから、Solaris iSCSI Initiator が一般にリリースされました。
しかし、iSCSI を堪能するには、iSCSI Target が必要となります。
Solaris iSCSI Initiator が実装された当時は、iSCSI Target を手軽に構築しようにも、なかなかできることではありませんでした。
しかし、昨年の夏、ついにソフトウェアによる iSCSI Target が Nevada build 44 にて実装されました!
さらに改良は続けられており、Nevada build 54 では、ZFS ファイルシステムとの連携が可能となりました。
この機会を逃すわけにはいきませんので、iSCSI Target となる Solaris 上に、zfs volume を作成し、その領域を iSCSI Initiator で mount してみるのが、今回の目的となります。
iSCSI の概要については、下記 URL に書かれているものが、良くまとまっているかと思いますので、 参考になるかと思います。
最新IPストレージ技術「iSCSI」
http://www.atmarkit.co.jp/fnetwork/tokusyuu/16iscsi/iscsi01.html
ZFS 連携では、ZFS の emulated volume 機能 ( zfs create -V) を利用します。
Nevada b54 では、ZFS 領域を iSCSI target として利用できる shareiscsi オプション が実装されました。
- 必要なもの
- iSCSI Target となる、Nevada b54 がインストールされたマシン
http://www.opensolaris.org/os/downloads/
- iSCSI Initiator となる、Solaris 10 11/06 がインストールされたマシン
http://www.sun.com/software/solaris/get.jsp
- 上記を接続するネットワーク
- マニュアル
Chapter 14 Configuring Solaris iSCSI Targets and Initiators (Tasks) http://docs.sun.com/app/docs/doc/819-2723/6n50a1mve?a=view
これだけです。
ZFS 同様、特定のハードウェアなどは、必要ありません。
- iSCSI Target の構築
まずは、iscsi target である、iscsitadm が起動しているか確認します。
# svcs -a | grep iscsi
disabled 21:20:36 svc:/network/iscsi_initiator:default
disabled 21:20:48 svc:/system/iscsitgt:default
default では、disable となっているので、これを enable にしてあげます。
# svcadm enable iscsitgt
# svcs -a | grep iscsi
disabled 21:20:36 svc:/network/iscsi_initiator:default
online 21:49:29 svc:/system/iscsitgt:default
次に、iSCSI Initiator が利用するストレージを作成します。
これは、ZFS で pool を作成、ZFS emulated volume で、適当な容量を切り出します。
ZFS 用にディスクが用意出来ない事態も考慮して、ここでは 2G バイトのファイル を利用して pool を作成してみることにします。
- 1. 2G バイトのファイルを作成し、zfs 領域を作成
# mkfile 2g /usr/tmp/iscsitest.2g
# zpool create test /usr/tmp/iscsitest.2g
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
test 1.98G 88K 1.98G 0% ONLINE -
- 2. 作成した test pool から、1G バイトの emulated volume である test/vol を作成します。
# zfs create -V 1gb test/vol
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
test 1.00G 976M 24.5K /test
test/vol 22.5K 1.95G 22.5K -
- 3. 利用する ZFS 領域を確保できたら、iSCSI Target で利用する backing storeディレクトリを指定します。
ここから、iSCSI を構築するためのコマンドが登場します。
・iscsitadm (iSCSI Target 管理コマンド )
・iscsiadm (iSCSI Initator 管理コマンド )
backing store ディレクトリは、iSCSI Target が Initiator に提供する領域 に使われる場所となるので、ここでは、emulated vlume を作成した /test (ZFS pool) を指定します。
# iscsitadm modify admin -d /test
# iscsitadm show admin
iscsitadm:
Base Directory: /test
CHAP Name: Not set
RADIUS Access: Not set
RADIUS Server: Not set
iSNS Access: Not set
Fast Write ACK: Not set
- 4. 作成した test/vol に shareiscsi オプションをセットします。
これで、iSCSI Target としての情報が登録されます。
# zfs set shareiscsi=on test/vol
- 5. iSCSI Target 情報を見る
iSCSI では、iSCSI Qualified Name と呼ばれるユニークな ID で、ノード管理をおこないます。
Solaris iSCSI Target/Initiator では、iqn. で始まる識別子を利用しており、iSCSI Target となる、Nevada b54 マシンは、
「iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea」
という、iSCSI ネームで識別されることがわかります。
# iscsitadm list target -v
Target: test/vol
iSCSI Name: iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea
Alias: test/vol
Connections: 0
ACL list:
TPGT list:
LUN information:
LUN: 0
GUID: 0x0
VID: SUN
PID: SOLARIS
Type: disk
Size: 1.0G
Backing store: /dev/zvol/rdsk/test/vol
Status: online
さらに、LUN 情報からは、VID(Vendor ID) や、容量(Size)、どのような領域を利用しているか (backing store) などがわかります。
以上で、iSCSI Target の構築は完了です。
本当ならば、接続認証などの設定もおこなうべきですが、まずは接続してみることを目的としていますので、省略します。
ちなみに、次期アップデートリリースとなる、Solaris 10 Update 4 では、iSCSI Target が提供される予定です。
それでは、上記で構築した iSCSI Target が提供する、1GB の領域を利用するために
iSCSI Initiator の設定をおこなってみましょう。
- iSCSI Initiator の構築
引き続き、Solaris 10 11/06 のマシンで iSCSI Initiator を構築します。
まずは、iSCSI Initiator のサービス (iscsid) が有効になっているか確認します。
# svcs -a | grep iscsi
disabled 21:20:36 svc:/network/iscsi_initiator:default
default では、disable となっているので、これを enable にしてあげます。
# svcadm enable iscsi_initiator
# svcs -a | grep iscsi
enable 21:20:36 svc:/network/iscsi_initiator:default
- 1. iSCSI Initiator の情報を確認
iSCSI Target の時と同様、iSCSI Initiator 側の情報も確認してみましょう。
iSCSI Initiator となる、Solaris 10 11/06 のマシンには、以下の iSCSI ネームが割り当てられていることがわかります。iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
# iscsiadm list initiator-node
Initiator node name: iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
Initiator node alias: -
Login Parameters (Default/Configured):
Header Digest: NONE/-
Data Digest: NONE/-
Authentication Type: NONE
RADIUS Server: NONE
RADIUS access: unknown
Configured Sessions: 1
- 2. iSCSI Target の IP アドレスを設定します。
iSCSI Target に接続するために、iSCSI Target となるマシンの IP アドレス (ここでは、129.158.56.74)を discovery-address に指定します。
# iscsiadm add discovery-address 129.158.56.74
- 3. iSCSI Target への接続を有効にします。
このコマンドを実行することで、すぐに接続が開始されます。
# iscsiadm modify discovery -t enable
- 4. デバイスを確認します。
それでは、デバイスが認識されているか確認しましょう。
てっとりばやく、iostat コマンドで。
# iostat -En
c0t010000D7E29A7AC700002A0045B5A7EDd0 Soft Errors: 2 Hard Errors: 0 Transport Errors: 0
Vendor: SUN Product: SOLARIS Revision: 1 Serial No:
Size: 1.07GB <1073741312 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 2 Predictive Failure Analysis: 0
お?何か、みたことのないデバイスが表示されていますよ?
実は、これが、iSCSI ディスクとなります。
もし、何も表示されない場合は、以下のコマンドを実行してください
# devfsadm -c iscsi
一見、わけのわからない文字列ですが、Solaris のデバイス命名規則に従っていることがわかります
コントローラ: c0
SCSI ターゲット: t010000D7E29A7AC700002A0045B5A7ED
SCSI LUN: d0
偉いですね。
続いて、format コマンドでみてみましょう。
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t010000D7E29A7AC700002A0045B5A7EDd0 <DEFAULT cyl 1021 alt 2 hd 64 sec 32>
/scsi_vhci/disk@g010000d7e29a7ac700002a0045b5a7ed
1. c1d0 <DEFAULT cyl 1336 alt 2 hd 255 sec 63>
/pci@0,0/pci-ide@1f,1/ide@0/cmdk@0,0
Specify disk (enter its number): 0
selecting c0t010000D7E29A7AC700002A0045B5A7EDd0
[disk formatted]こちらも、ローカルに接続されたディスクとして見えていますね。
この状態のまま、iSCSI Target 側で target 情報をみてましょう。
すばらしい。
Initiator の項目が増え、iSCSI ネームが表示されています。
これは、iSCSI Initiator となる Solaris 10 11/06 のものであることが わかり、接続されていることがわかります。
# iscsitadm list target -v
Target: test/vol
iSCSI Name: iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea
Alias: test/vol
Connections: 1
Initiator:
iSCSI Name: iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
Alias: unknown
ACL list:
TPGT list:
LUN information:
LUN: 0
GUID: 010000d7e29a7ac700002a0045b5a7ed
VID: SUN
PID: SOLARIS
Type: disk
Size: 1.0G
Backing store: /dev/zvol/rdsk/test/vol
Status: online
ここまでできれば、あとは煮るやり焼くなり、お好きなように。
NFS などの、ネットワーク・ファイルシステムと違い、Solaris 上からはローカルな デバイスとして扱うことができるため、ファイルシステムを作成できます。
では、ちょっと実験してみましょう。
- 5. iSCSI ディスクを使って、ZFS プールを作成
わくわくする瞬間です。認識できた iSCSI ディスクに ZFS ファイルシステムを構築してみましょう。
デバイス名は、すでにわかっているので、下記のコマンドを実行します。
# zpool create test c0t010000D7E29A7AC700002A0045B5A7EDd0
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
test 1008M 134K 1008M 0% ONLINE -
# zfs create test/iscsi
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
test 132K 976M 26.5K /test
test/iscsi 24.5K 976M 24.5K /test/iscsi
# zpool status -v
プール: test
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
c0t010000D7E29A7AC700002A0045B5A7EDd0 ONLINE 0 0 0
エラー: 既知のデータエラーはありません# kazus
できちゃいました。
ちょっと感動しました。
性能は、iSCSI Target となるマシンや、ネットワークに依存しますので、なんとも言えません。
が、Sun Fire X4500 を使って dladm で trunking、そんな環境で実験してみたくなったのでした。
これからの Solaris にも、どうぞご期待ください。
Posted at 10:49午前 1 26, 2007 by noriho in Sun | 投稿されたコメント[1]