2009年3月 のアーカイブ

istgt (iSCSI target) 20090309版 for FreeBSD 7.x with ZFS

2009年3月10日 火曜日

更新>istgt 2009/3/13版

データセグメント長を指定しないイニシエータを考慮してみました。
また、新しい設定は以下のようになります。
# NOPIN sending interval sec.
NopInInterval 20

istgt (tarball): istgt-20090309.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090309.tar.gz
# cd istgt-20090309
# ./configure
# make
# make install

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090309.tar.gz) = be2ecde3146886f7ef23084afb4509aa
SHA256 (istgt-20090309.tar.gz) = 3dc9a8a293cfc0a818ccd1cb79357b36f0678b17ed1ad14ba0a44e1e120bcd54

主な修正点:
MaxRecvDataSegmentLengthを指定しないイニシエータも考慮するように
データサイズの初期化方法を変更しました。
NOPIN間隔を指定できるようになりました。
正常ログインもsyslogに記録するようになりました。

istgt (iSCSI target) 20090308版 for FreeBSD 7.x with ZFS

2009年3月8日 日曜日

更新>istgt 2009/3/9版

DVDROMタイプのパススルーをサポート開始しました。
現在の仕様ではパススルーデバイスがタグ付きキューを持つかどうかにかかわらず
常に1個づつコマンドを発行します。

診断の為のNOPOUTがコマンド保留中はエラーになる可能性がある
という問題を修正しました。
根本的にエラーチェックせず応答するべきなのかな?
もっと広範囲にテストしてもらわないと分らないかもしれない。

コマンドシーケンス数を正しくカウントしないイニシエータが相手の場合に
データ転送中にコマンドを無制限にキューに溜め込む仕様だった為、
メモリを消費し尽くす可能性があったので制限しました。

このリリースまでの機能がスレッド同期I/Oの最終版になる予定です。
致命的な問題が発生しなければ次は非同期I/Oを実装したものになるかもしれない。
それにしても初期リリースから二週間でこのバグの多さはひどい(汗)

istgt (tarball): istgt-20090308.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090308.tar.gz
# cd istgt-20090308
# ./configure
# make
# make install

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090308.tar.gz) = 1ec624f4db50d5133d821806aaf06bba
SHA256 (istgt-20090308.tar.gz) = be5fb012cecf3f8627435ec316b35c55fa73ee03ceaf1957ba875892d0fce5db

主な修正点:
サポート外ユニットにINQUIRY以外発行しないように修正しました。
パススルーデバイスでCD/DVD型をサポートするようになりました。
受信PDUの最大データサイズがFirstBurstに制限されていた問題を修正しました。
NOPOUTに対するStatSNエラーの問題を修正しました。
コマンドを事実上無制限にキューに溜め込む仕様だったのを制限するようになりました。
登録系PROコマンドのパラメータチェックを厳しくしました。
デーモン起動時にディスク型はUNIT ATTENTION(POWER ON, RESET)を発行するようになりました。

Windows Server 2008でiSCSIデバイスにマルチパス機能を使う

2009年3月6日 金曜日

まずサーバーマネージャの機能の追加からマルチパスI/Oをインストールする。
iSCSIイニシエータで通常の接続を行う。
管理ツール(スタートメニュー等)からMPIOを起動する。
「マルチパスの検出」タブを選択する。
「iSCSIデバイスのサポートを追加する」のチェックボックスにチェックをいれて「追加」を押す。
再起動を要求されるので再起動します。

以上でiSCSIイニシエータを使ったマルチパス機能が有効になります。
デバイスのプロパティにMPIOタブが表示されるようになります。

istgt (iSCSI target) 20090306版 for FreeBSD 7.x with ZFS

2009年3月6日 金曜日

更新>istgt 2009/3/8版

保留したデータをキューから取り出しミスしてクラッシュする事がありました。
CAMを利用したSCSIパススルーデバイスを新たに追加しました。
現在はハードディスクのようなダイレクトアクセス型のみサポートです。

istgt (tarball): istgt-20090306.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090306.tar.gz
# cd istgt-20090306
# ./configure
# make
# make install

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090306.tar.gz) = dea24986ad6d4c6eb31b44a1f452777a
SHA256 (istgt-20090306.tar.gz) = c28bd980191d86e36eb2d429f49a5b2f8b630c7dbf601644bae2072ab3940345

主な修正点:
保留したデータをキューから取り出しミスしていたのを修正しました。
消失したと思われるコマンドを読み飛ばすように修正しました。
パススルーデバイスのサポートを開始しました。
サンプル設定ファイルをistgt.large.confに変更して、簡易版も同梱しました。

MCSとMPIO(マルチパスI/O)によるストレージI/Oの可用性の向上

2009年3月5日 木曜日

MCSとマルチパスのどちらがいいのかと言われると困るけど、
しいて言うならロジカルユニットがキューイングしない現時点では、
マルチパス、ラウンドロビンの方が先行したコマンドの結果を受信する前に
次のコマンドを送信できるのでスループットがあがる可能性が高いです。
もちろん利用するアプリケーションによっては差がないことも考えられます。
MCSはiSCSI規格で規定された基本機能ですので細かい制御はできないかわりに依存性はさほどありません。
マルチパスの場合は利用するパス制御ソフトによってはバージョンや機能等に制限がある場合もあります。

どちらの方法を選択するにしてもターゲットとイニシエータの
双方に二系統以上のポートを用意することでパスの冗長化が可能です。

MCSやMPIO(マルチパスI/O)を使うと以下のような状態になります。

+---------------+ TSIH1/CID1 +-----------+
|               |------------|           |
| initiator 1   |            |iSCSI Node |
|  (MCS)        | TSIH1/CID2 | (Target)  |
|               |------------|           |
+---------------+            +-----------+

+---------------+ TSIH1/CID1 +-----------+
|               |------------|           |
| initiator 1   |            |iSCSI Node |
|  (MPIO)       | TSIH2/CID1 | (Target)  |
|               |------------|           |
+---------------+            +-----------+

TSIH: Target Session Identifying Handle
CID: Connection ID

ここでパス1(上側)に通信障害が発生すると、
WS2008の場合はおよそ30秒後に正常パスに切り替えが発生します。

+---------------+ TSIH1/CID1 +-----------+
|               |--- XXXX ---|           |
| initiator 1   |            |iSCSI Node |
|  (MCS)        | TSIH1/CID2 | (Target)  |
|               |------------|           |
+---------------+            +-----------+

+---------------+ TSIH1/CID1 +-----------+
|               |--- XXXX ---|           |
| initiator 1   |            |iSCSI Node |
|  (MPIO)       | TSIH2/CID1 | (Target)  |
|               |------------|           |
+---------------+            +-----------+

障害発生中は生き残っているパスでI/Oをすべて処理します。

注:現時点のistgtはコネクション単位のリカバリーを行わない為、
MCSの場合はセッション自体の張り直しが行われます

+---------------+            +-----------+
|               |--- XXXX ---|           |
| initiator 1   |            |iSCSI Node |
|  (MCS)        | TSIH2/CID2 | (Target)  |
|               |------------|           |
+---------------+            +-----------+

+---------------+            +-----------+
|               |--- XXXX ---|           |
| initiator 1   |            |iSCSI Node |
|  (MPIO)       | TSIH2/CID1 | (Target)  |
|               |------------|           |
+---------------+            +-----------+

障害が修復されると自動的に再接続により冗長パスに戻ります。

+---------------+ TSIH2/CID1 +-----------+
|               |------------|           |
| initiator 1   |            |iSCSI Node |
|  (MCS)        | TSIH2/CID2 | (Target)  |
|               |------------|           |
+---------------+            +-----------+

+---------------+ TSIH3/CID1 +-----------+
|               |------------|           |
| initiator 1   |            |iSCSI Node |
|  (MPIO)       | TSIH2/CID1 | (Target)  |
|               |------------|           |
+---------------+            +-----------+

このような冗長パスに対して、
双方のパスをアクティブとして交互に利用するラウンドロビン、
片方をスタンバイとして障害時のみ利用するフェイルオーバーのみなど
いくつかの負荷分散ポリシーの設定ができます。
もちろんパス利用中にポリシーを変更する事も可能です。

ヘッダダイジェスト、データダイジェストを共に有効にして、
MCS、MPIOでそれぞれ二本接続ラウンドロビンに設定して、
CrystalDiskMarkの最大値である1000MBに対してWS2008
から実行した場合はこんな感じに。
さらにデフォルトの100MBに対してMPIOするとこんな感じに。

MCS/ラウンドロビン/1000MB

MPIO/ラウンドロビン/1000MB

MPIO/ラウンドロビン/100MB

見ての通り対象サイズが大きい場合はMCSでMPIOでも今はまだそんなに違いは出ない。
(シーケンシャルライトでちょっと成績いいか)
しかしながら小サイズのI/OではMPIOによる効率アップが効いているようです。

ダイジェストを無効にすると10%ぐらいのスループットアップが期待できますが、
万が一途中経路でデータ破損した場合にそのまま転送されてしまいます。
せっかく経路を冗長化しても転送データ自体が破損していたら意味ないので、
そのあたりのトレードオフを良く考えた方がいい。

istgt (iSCSI target) 20090304版 for FreeBSD 7.x with ZFS

2009年3月5日 木曜日

更新>istgt 2009/3/6版

MCSExtraパッチで凍結していたマルチパス関係を追加しました。
現在サポートするのはMicrosoft MPIO(マルチパスI/O)のみです。
MCSでもMPIOでも二系統以上用意することで高可用性を実現可能になりました。
不完全なTPGSはとりあえずINQUIRYでノーサポートに設定しました。
フェールオーバークラスタ管理にある構成の検証でマルチパス接続
(ラウンドロビン)のドライブがテストすべて合格する事を確認しました。

MCSから始まった開発はついにマルチパスフェールオーバーもサポートすることに。
iscsi-targetとは完全に方向性が違うようになった。

istgt (tarball): istgt-20090304.tar.gz
クラッシュする事があるので修正版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090304.tar.gz
# cd istgt-20090304
# ./configure
# make
# make install

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090304.tar.gz) = dc9fd67f5bfc3359a6f7f600a235a0be
SHA256 (istgt-20090304.tar.gz) = 42db7a7dab17b9e868f0edc499a1ac8616ff2ff11a8c18adb88c0bec27c6a921

主な修正点:
NAA形式のINQUIRYを返すようになりました。
アイドル時のNOPIN発行によりイニシエータの死活監視をサポートするようになりました。
TargetAliasを不正に送信していた問題を修正しました。
仮想DVDROM、仮想テープもディスク同様のINQUIRYを返すように修正されました。
マルチパス上で複数のPDUを受信しても動くように修正しました。
INQUIRYのTPGSを設定しないようになりました。

istgt (iSCSI target) 20090301版 for FreeBSD 7.x with ZFS

2009年3月1日 日曜日

更新>istgt 2009/3/4版

AuthMethod None及びDiscoveryAuthMethod Noneを完全に廃止しました。
お手数ですが設定ファイルをNoneからAutoへの変更をお願いします。

istgt (tarball): istgt-20090301.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090301.tar.gz
# cd istgt-20090301
# ./configure
# make
# make install

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

主な修正点:
DiscoveryセッションでLUの到達性を確認するようになりました。
ベンダー定義の拡張キーをエラーとして記録しないようしました。
AuthMethodの項目をNoneからAutoに変更しました。
媒体サイズのGB表示を少数第一位まで出すようにしました。

istgtを使ってESXi3.5U3でiSCSIデバイスとCHAP認証を構成する

2009年3月1日 日曜日

VMware Infrastructure Clientを起動してログインする。
ConfigurationタブのHardwareグループにあるStorage Adaptersを開く。
iSCSI Software Adapterのグループにあるアダプタをクリックする。
Details の右端に Propertiesが表示されているので、クリックして開く。
初期状態で無効になっているので[General]タブにある[Configure...]をクリックする。
Enabled というチェックボックスがあるのでチェックして[OK]をクリックする。

以上でホスト名を元にイニシエータ名が自動的に構成されます。
続いて[Dynamic Discovery]タブにiSCSIターゲットのアドレスを登録する。
CHAP認証を使うにはさらに[CHAP Authentication]タブで構成します。

!!注意!! CHAP認証を構成する前にistgt.confの設定を必ず行ってください。

ESXでCHAP認証を構成すると、ESXがアクセス可能なすべてのターゲット、
及びDiscoveryセッションに認証が要求されます。

istgt.confの設定でESXに見せるべきでないターゲットは
InitiatorGroupのマップに設定しないこと。

現時点のistgtでは部分否定ができないので、
「InitiatorName ALL」はどのイニシエータグループにも設定しないようにします。
これで気が付いたのだけど指定したポータルグループ群が接続ポートから
本当にアクセス可能かどうかのチェックをDiscoveryでしていなかった(汗)
次のバージョンで直します。

CHAP利用時の設定例(抜粋)

istgt.conf

[Global]
  DiscoveryAuthMethod None
  DiscoveryAuthMethod Auto
  DiscoveryAuthGroup AuthGroup9000
[PortalGroup3]
  Portal DA1 192.168.2.36:3260
[InitiatorGroup7]
  InitiatorName "iqn.1998-01.com.vmware:esxi-309ff581"
  Netmask 192.168.2.0/24
[LogicalUnit1]
  Mapping PortalGroup3 InitiatorGroup7
  AuthMethod CHAP
  AuthGroup AuthGroup9000

auth.conf

[AuthGroup9000]
  Auth "iqn.1998-01.com.vmware:esxi-309ff581" "testchaptest"

うーん「AuthMethod None」というのは絶対まぎらわしい。
これ実際にNoneを強制じゃなくてNoneも許可(Auto)なんだよね。
今後どうするか考えよう。
(追記:20090301からNoneを廃止してAutoにしました)

実際に20090228版につなげたときの画像はこんな感じ

istgt (iSCSI target) 20090228版 for FreeBSD 7.x with ZFS

2009年3月1日 日曜日

更新>istgt 2009/3/1版

ESXi3.5U3を使ってiSCSI接続を確認しました。
いくつか問題があったので修正しました。
現在アクティブに調整を行っているのは以下のイニシエータです。

Microsoft Windows Server 2008
Microsoft iSCSI Initiator 2.08
Intel iSCSI Remote Boot 2.1.22
Sun VirtualBOX 2.1.2
VMware ESXi 3.5 Update 3

istgt (tarball): istgt-20090228.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090228.tar.gz
# cd istgt-20090228
# ./configure
# make
# make install

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090228.tar.gz) = a44a429196e8ffb001bc334612d18e06
SHA256 (istgt-20090228.tar.gz) = 633d26558df7e51da888ae14945dcbc3e8c2065ce3e17a4ed403ada5e847aa2c

主な修正点:
INQUIRY VPD 0×85/0×87/0×88に応答するようになりました。
RELEASE/RESERVEが期待通り動かないのを修正しました。