Linux iSCSI Utility を用いた、低コスト iSER(RDMA)

Linux iSCSI Utility を用いた、低コスト iSER(RDMA)ストレージシステムの構築
はじめに、Mellanox Ethernet/InfiniBand アダプタ製品の新ドライバでは、iSER(RDMA)プロト
コルをサポートしております。Linux で標準的に使用されている iSCSI ユーティリティ scsi-targetutils 及び iscsi_initiator_utils を使い、低コスト IA サーバでのストレージシステム構築を具体
的に実現する方法を示したいと存じます。
今回のシステムは、標準的なインテル アーキテクチャ・サーバ、CentOS6.5、及び Mellanox FDR
HCA/40GbE NIC を使用しました。
まずは、scsi-target-utils を用いてターゲットソフトウェアの導入ステップを説明します。
殆どのコマンドは、 scsi-target-utils パッケージの README に記載されています。
(/usr/share/doc/scsi-target-utils-*/README.iscsi)
------■ 導入
------scsi-target-utils パッケージを導入します。
# yum install scsi-target-utils
------■ 構成
------接続リクエストを通すように Firewall の設定を変更します。その方法としてここでは、次の2つの選択肢
を提示いたします。A. Firewall サービスそのものを停止する。B.Firewall Port 3260を通して
接続リクエストが行えるようにします。
A. Firewall を停止する場合:
# service iptables stop
B. Firewall の port 3260 のみを開ける場合:
# system-config-firewall
-----------------------■ ターゲットシステムの構成
-----------------------上記構成が終了すると、tgtd サービスは iSCSI イニシエータから LVM 論理ボリューム、ディスクパー
ティション、ディスク全体またはファイルとしてアクセスできるブロックデバイスを生成します。通常は、
LVM 論理ボリュームとして使用されます。本構成では、ファイルを選択します。
1. 1GB の ram disk ファイルを生成
# dd if=/dev/zero of=/tmp/iscsi-disk1 bs=1M count=1000
2. SELinux の解除
# setenforce 0
3. サービスの開始
# service tgtd start
# chkconfig tgtd on
1
サーヴァンツインターナショナル株式会社
代表:03-4455-7531 FAX:03-3346-5234
〒160-0023 東京都新宿区西新宿6−20−7 コンシェリア西新宿タワーズウエスト 4F
----------------■ ターゲットの準備
----------------手早くターゲットデバイスを提供するためには、1つの論理ユニットをイニシエータに提供します。
1. ターゲットデバイスの生成
2. 論理ユニットの追加
3. イニシエータを受け付けるようにターゲットをセット
tgtadm ユーティリティを使用してターゲットシステムを作るためのステップであり、これらの詳細は
scsi-target-utils パッケージの README.iscsi 内に記載されています。
アクティブターゲットを表示する
# tgtadm --lld iser --mode target --op show
新しいターゲットデバイスを作成する
# tgtadm --lld iser --mode
07.com.server.t2:iserdrive
target
--op
new
--tid=1
--targetname
iqn.2014-
Logical Unit(LUN)を追加する
# tgtadm --lld iser --mode logicalunit --op new --tid 1 --lun 1 -b /tmp/iscsidisk1
-------------■ アクセス許可
-------------tgtadm を使用することで認証、及びアクセス制限を行うことができます。
全ての登録されたユーザアカウントを表示する
# tgtadm --lld iser --mode account --op show
IP ワイルドカードで全てのイニシエータが アクセスできるようにする
# tgtadm --lld iser --mode target --op bind --tid 1 -I ALL
IP ベースのユーザのアクセス制限を設定する
もし IP ワイルドカードが使用され全てのイニシエータがこのターゲットにアクセス可能であれば、まず、
現在のアクセス構成を解除します。
# tgtadm --lld iser --mode target --op unbind --tid 1 -I ALL
特定の IP を持ったイニシエータからのアクセスのみに制限する
# tgtadm --lld iser --mode target --op bind --tid 1 -I 192.168.1.10
特定のサブネット内のイニシエータからのアクセスのみに制限する
# tgtadm --lld iser --mode target --op bind --tid 1 -I 192.168.1.10/24
-------------------------■ User/Password 認証(CHAP)
-------------------------iSCSI 認証では、イニシエータ認証及びターゲット認証の2種類の方法があります。
イニシエータ認証は CHAP 認証の基本であり、ユーザネーム及びパスワードはターゲット側にあります。
各々のイニシエータは、このユーザネームとパスワードでログインします。
ターゲット認証は、イニシエータ認証を拡張した認証方法です。
1. ユーザおよびパスワードの登録
# tgtadm --lld iser --mode
“servants12345”
account
--op
new
--user
“iseruser1”
--password
2
サーヴァンツインターナショナル株式会社
代表:03-4455-7531 FAX:03-3346-5234
〒160-0023 東京都新宿区西新宿6−20−7 コンシェリア西新宿タワーズウエスト 4F
2. 実存するターゲットデバイスへユーザを追加
# tgtadm --lld iser --mode account --op bind --tid 1 --user “iscsiuser1”
3. イニシエータシステム内の/etc/iscsi/iscsid.conf へユーザネーム及びパスワードを登録する
ディスカバリー認証(tgt ではサポートされていない)
discovery.sendtargets.auth.{username,password}
セッション認証
node.session.auth.{username,password}
----------------------------■ CHAP Target Authentication
----------------------------1. ユーザネーム及びパスワードの設定
# tgtadm --lld iser --mode account --op new --user “iseruser” --password “servants12345”
2. 実存するターゲットデバイスへユーザを追加
# tgtadm --lld iser --mode account --op bind --tid 1 --user “iseruser” --outgoing
3. イニシエータシステム内の/etc/iscsi/iscsid.conf へユーザネーム及びパスワードを登録
ディスカバリー認証(tgt ではサポートされていない)
discovery.sendtargets.auth.{username_in,password_in}
セッション認証
node.session.auth.{username_in,password_in}
------------------------------■ iSCSI イニシエータのセットアップ
------------------------------1.パッケージのインストール
iscsi-initiator-utils パッケージをインストールします
rpm -Uvh /mnt/ClusterStorage/iscsi-initiator-utils*.rpm
または、
yum install iscsi-initiator-utils
インストールします。
2.設定ファイルの編集
"/etc/iscsi/iscsid.conf"の下記の部分を編集します。
赤字の場所は、ターゲットで設定されている値を指定します。
node.session.auth.authmethod = CHAP
node.session.auth.username = iseruser
node.session.auth.password = servants12345
discovery.sendtargets.auth.username = iseruser
discovery.sendtargets.auth.password = servants12345
3.サービスの起動
iSCSI イニシエータのサービスを起動します。
注)
:"iSCSI ターゲットを設定中"に"No records found!"と表示されますが、この時点では、まだタ
ーゲットを登録していませんので、これは、正常なメッセージです。
# service iscsi start
iscsid は停止しています
Turning off network shutdown. Starting iSCSI daemon:
[
[
OK
OK
]
]
[
OK
]
iSCSI ターゲットを設定中: iscsiadm: No records found!
ここからイニシエータの設定を行います。
3
サーヴァンツインターナショナル株式会社
代表:03-4455-7531 FAX:03-3346-5234
〒160-0023 東京都新宿区西新宿6−20−7 コンシェリア西新宿タワーズウエスト 4F
イニシエータの情報はデータベース管理されており、iscsiadm コマンドを用いてこのデータベースを参照、
更新できます。
最初にターゲットの情報を取得してデータベースに登録します。
# iscsiadm -m discovery -t sendtargets -p 192.168.1.11:3260
192.168.1.11:3260,1 iqn.2014-07.com.server.t2:iserdrive
-p オプションで指定したストレージのコントローラで接続可能なターゲットの情報一覧が表示される。同
時にデータベースへの登録も行われる。
次に接続したいターゲットを指定してログインします。
# iscsiadm -m node -T iqn.2014-07.com.server.t2:iserdrive -p 192.168.1.11,1 --login
Logging in to [iface: default, target: iqn.2014-07.com.server.t2:iserdrive, portal:
192.168.1.11,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2014-07.com.server.t2:iserdrive,
portal: 192.168.1.11,3260].
iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)
iscsiadm: Could not log into all portals
ログインがうまくいかなかった様です。一度認証情報をアップデートします。
# iscsiadm -m node -T iqn.2014-07.com.server.t2:iserdrive -p 192.168.1.11:3260,1 --op
update -n node.session.auth.authmethod -v CHAP
# iscsiadm -m node -T iqn.2014-07.com.server.t2:iserdrive -p 192.168.1.11:3260,1 --op
update -n node.session.auth.username -v iseruser1
# iscsiadm -m node -T iqn.2014-07.com.server.t2:iserdrive -p 192.168.1.11:3260,1 --op
update -n node.session.auth.password -v servants12345
再びログインしますがそれでもエラーが発生しています。
iSERを認識出来ていないようです。
# iscsiadm -m node -T iqn.2014-07.com.server.t2:iserdrive -p 192.168.1.11 --login
Logging in to [iface: default, target: iqn.2014-07.com.server.t2:iserdrive, portal:
192.168.1.11,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2014-07.com.server.t2:iserdrive,
portal: 192.168.1.11,3260].
iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)
iscsiadm: Could not log into all portals
node.transport_name をiSER にセットします。
# iscsiadm -m node -p 192.168.1.11 -T iqn.2014-07.com.server.t2:iserdrive --op update -n
node.transport_name -v iser
# iscsiadm -m node -p 192.168.1.11 -T iqn.2014-07.com.server.t2:iserdrive --login
Logging in to [iface: default, target: iqn.2014-07.com.server.t2:iserdrive, portal:
192.168.1.11,3260] (multiple)
Login to [iface: default, target: iqn.2014-07.com.server.t2:iserdrive, portal:
192.168.1.11,3260] successful.
#
dmesg コマンドで、ストレージがどのデバイスとして認識されたかを確認します。
ここでは/dev/sdc として認識されていました。
この後は通常どおりのブロックデバイスの操作になります。
なお、これらの設定情報を編集するには同じく iscsiadm コマンドをアップデートモードで実行します。
# iscsiadm -m node -T iqn.1994-04.jp.co.hitachi:rsd.d7h.t.11799.1a000 -p
192.168.1.11 -o update -n node.startup -v manual
* -o update : 操作モードをアップデートモードに指定
* -n : 設定項目を指定
* -v : 設定項目の値を指定
4
サーヴァンツインターナショナル株式会社
代表:03-4455-7531 FAX:03-3346-5234
〒160-0023 東京都新宿区西新宿6−20−7 コンシェリア西新宿タワーズウエスト 4F
iSCSI ブロックデバイスを通常のストレージデバイスとして使用します。
普通にパーティションを作成するには fdisk 等を用います。
# fdisk /dev/sdc
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも含んでいません。
新たに DOS ディスクラベルをディスク識別子 0x27b4c109 で作成します。
あなたが書き込みを決定するまで、変更はメモリ内だけに残します。
その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって 正常になります
警告: DOS 互換モードは廃止予定です。このモード (コマンド 'c') を止めることを 強く推奨します。 and
change display units to sectors (command 'u').
コマンド (m でヘルプ): n
<-新しいパーティションを作成
コマンドアクション
e 拡張
p 基本パーティション (1-4)
<-基本パーティションの作成
p
パーティション番号 (1-4): 1 <-パーティションは1つで設定
最初 シリンダ (1-1017, 初期値 1): <- 全ての領域を1パーティションに入れます
初期値 1 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-1017, 初期値 1017):
初期値 1017 を使います
コマンド (m でヘルプ): p
<-パーティションの作成状況の確認を行います
ディスク /dev/sdc: 1048 MB, 1048576000 バイト
ヘッド 33, セクタ 61, シリンダ 1017
Units = シリンダ数 of 2013 * 512 = 1030656 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x27b4c109
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdc1 1 1017 1023580 83 Linux
コマンド (m でヘルプ): q
<-終了
ブロックデバイスに Linux ファイルシステムを作成します。
# mkfs /dev/sdc
mke2fs 1.41.12 (17-May-2010)
/dev/sdc is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
64000 inodes, 256000 blocks
12800 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=264241152
8 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
5
サーヴァンツインターナショナル株式会社
代表:03-4455-7531 FAX:03-3346-5234
〒160-0023 東京都新宿区西新宿6−20−7 コンシェリア西新宿タワーズウエスト 4F
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
デバイスをマウントします。
通常の Linux のファイルシステムが出来上がっていることを確認します。
# mount /dev/sdc /mnt
# ls -al /mnt
合計 24
drwxr-xr-x. 3 root root 4096 8月 19 14:51 2014 .
dr-xr-xr-x. 26 root root 4096 8月 19 14:34 2014 ..
drwx------. 2 root root 16384 8月 19 14:51 2014 lost+found
早速ターゲットストレージデバイスにファイルを作ってみると、2.4Gb/s の転送速度が確認されました。
。
# dd if=/dev/zero of=/mnt/aaa bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 0.219778 s, 2.4 GB/s
確かに、コピーはされています。
# ls -al /mnt
合計 512532
drwxr-xr-x. 3 root root 4096 8月 19 14:52 2014 .
dr-xr-xr-x. 26 root root 4096 8月 19 14:34 2014 ..
-rw-r--r--. 1 root root 524288000 8月 19 14:52 2014 aaa
drwx------. 2 root root 16384 8月 19 14:51 2014 lost+found
以上、iSER プロトコル(RDMA)でのストレージシステム構築の流れを示させていただきました。
6
サーヴァンツインターナショナル株式会社
代表:03-4455-7531 FAX:03-3346-5234
〒160-0023 東京都新宿区西新宿6−20−7 コンシェリア西新宿タワーズウエスト 4F