Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Google Code Prettify

ラベル iSCSI の投稿を表示しています。 すべての投稿を表示
ラベル iSCSI の投稿を表示しています。 すべての投稿を表示

2010年7月1日

Linux SCSI Target Framework を使う

Debian/Ubuntu の iSCSI Target のお話が出てくると、iSCSI Enterprise Target (IET)が必ず出てくる。

まぁ、良いんだけど kernel ソースに取り込まれていないモジュールを使うので、 時々、他の複合的な要因かもしれないが、あさっての場面で oops は吐いくれたりする。

Fedora/RHEL/CentOS とかだと、既にLinux SCSI Target Framework(tgt)に移行している。コイツは 2.6.20 頃 kernel ソースに取り込まれているので、 結構安定してるんじゃないかなと思う。

tgt の性能に関しては、2006 年頃の論文「Linuxにおけるストレージシステムフレームワークの実現(オペレーティングシステム)」を見る限り、IET と若干落ちるぐらいなので、気にしなくても良いかも。

そろそろ Debian/Ubuntu でも Linux SCSI Target Framework(tgt)に移行する時期だ。

ユーザベースのツール群 tgt パッケージは、squeeze/lucid で用意されているみたいなので、やってみた。

ハマりポイントが2点ある。

  1. init スクリプトが見当たらない。バグ(#577925BUG #574554)として登録されている。
  2. tgt-admin 内で、デバイスが既に利用してるかどうかチェックする部分が上手く動いていない。と言うか、Debian/Ubuntuでは /bin/sh が dash (ash の亜種) になっているため、perl の system関数の呼び出しのスクリプト片に移植性がある書き方が要求される。コイツを踏んでる。

なので Fedoraのinitスクリプトを参考に、upstart 用のイベント設定ファイル? /etc/init/tgtd.confを書き下し、tgt-admin の修正パッチtgt-admin.diffを作ってみた。

例として、単一ディスクをiSCSIで公開する事を考える

以下の設定ファイルを書き下し、「tgt-admin -e」とタイプすれば良い。

/etc/tgt/targets.conf

default-driver iscsi

<target iqn.2010-07.com.example:stroage.fserver.data>
	driver iscsi
	backing-store /dev/sdb
</target>

実際にiSCSIターゲット設定が上手く行ったかは、次のようにする。

# tgt-admin -s
Target 1: iqn.2010-07.com.example:stroage.fserver.data
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: None
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 34360 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: /dev/sdb
    Account information:
    ACL information:
        ALL

あとは、巷に溢れている tgt の設定方法が使える。 上手く設定すると、CDドライブやリムーバルディスクとかも、ネット越しで使えるようになるらしい。

追記 (2010/09/06)

気づいてみると、二番目のハマり点も修正済み(#589716)になったようである。

debian squeeze がリリースしたら、tgt をサクッと使うようになれる訳ですね。

2009年9月24日

Linux の iSCSI

Linux で iSCSI を、やるならば先ず「iSCSI Enterprise Target (IET)」である。そして、kernel に取り込まれてる iSCSI システムが別にあるよってなる。

それって何だろう?

Linux SCSI target framework (STGT)」がそれらしい。iSCSIに限らず Fiber Channel などの一般的な SCSI Target を対象に絶賛開発中らしい。ユーザランドのコマンドは RHEL5系でscsi-target-utils として提供されいるので、結構安定してるかも。ただ、Debian にはまだ無いっぽい。

あと、別系統として、「generic SCSI target subsystem for Linux (SCST)」てのがある。

三種類の比較表を見ると、SCST が多機能で高性能っぽい。今後が楽しみだなぁ

2009年9月10日

Time Machine を iSCSI 経由で使う (3) - 性能比較

ボリュームをiSCSIの載せたときの性能と、IPSecで保護した場合やWiFi経由にした場合の性能劣化を測定してみた。

設定条件

接続の経路に結構余分な機器が挟まっているが、 測定用に別環境は用意していないためである。 実環境ベースと考えて勘弁してもらいたい。

Linux ターゲット側
  • ASUS M2NPV-VM / Athlon64X2 3800+ (2GHz) / DDR2-533 1G x 4
  • onboard Gigabit Ethernet (nVidia MCP51)を利用。
Mac OSX のイニシエータ側
  • MacBookPro5,1 / Intel Core 2 Duo / 2.4 GHz / DDR3-1066 2G x 2
  • onboard Gigabit Ethernet / AirMac(WiFi) を利用。
  • Wifi経由では 802.11n/WPA2でアクセスポイントに接続
接続形態
  • ローカルHDD
    MacBookPro
    ⇔ ExpressCard(GH-EXC-ESA2/eSATA接続) ⇔ HDDケース(LHR-DS02SAU2BU) ⇔ HDD
  • 有線ネットワークでは
    MacBookPro
    ⇔ Gigabit Hub(LSW-GT-8NSR)
    ⇔ Gigabit Hub(GS908M) ⇔ Gigabit Hub(GS908M)
    ⇔ Linux マシン(SATA接続) ⇔ HDD
  • Wifi経由では
    MacBookPro
    ⇔ AirMac Extreme (2007モデル?有線100Baseの奴)
    ⇔ Gigabit Hub(GS908M) ⇔ Gigabit Hub(GS908M)
    ⇔ Linux マシン(SATA接続) ⇔ HDD
測定したHDD
  • SATA 320G HDD(ST3320620AS)
  • 3.0Gbps が有効になる用にジャンパー設定
  • iSCSI/ローカル接続でも同じモデルを利用

測定結果

ローカルHDDGigaEtherWifi経由GigaEtherWifi経由
IPSec 無IPSec 有
SequentialUncached Write [4K blocks]58.1960.515.3413.155.48
Uncached Write [256K blocks]47.5850.827.3312.654.72
Uncached Read [4K blocks]16.166.021.464.751.38
Uncached Read [256K blocks]75.5528.863.3915.864.90
RandomUncached Write [4K blocks]1.251.361.321.351.26
Uncached Write [256K blocks]26.1924.376.1913.106.93
Uncached Read [4K blocks]0.640.610.450.580.43
Uncached Read [256K blocks]26.6823.663.2111.174.63
測定単位は全て MByte/sec

ゴタク

iSCSI を有線/noIPSec で通す場合、シーケンシャル読込み以外はほとんど劣化が無い。 シーケンシャル読込みはキャッシュがほとんど効かない為か、iSCSIターゲット実装の良し悪しが出ていると思う。 また、チューニングを実施せずにデフォルト設定にしているので、それも影響しているのかも。

IPSec で保護すると、約120Mbps (15Mbyte/sec) 程度で頭打ちになっている。IPSec の実効帯域と思われる。Gigabit Ethernet なのに帯域が一割程度とはちょっと情けない。IPSec 固有の問題か、Linux の実装の問題か、iSCSI との組み合わせか、判然としない。何処に文句を言っていいのか分からない。

iSCSI を無線にした場合は、大きな問題は経路の帯域である。iSCSIとか、IPSec の有無とかは、もはや問題ではない。周囲の電波状況によって影響を受けるが、WPA2で50Mbpsくらいは流れるので良いのかなぁ。

結論

iSCSIをIPSecで保護することは、 無線を使って Time Machine でバックアップすることには殆ど影響しないと言えそうだ。 また、差分は一時間に一度であり、有線であっても約 120Mbps 程度の帯域を確保できることを考えると、 目くじらを立てるものではないのかなぁ。

2009年9月8日

Time Machine を iSCSI 経由で使う (2) - IPSecで保護

iSCSI はブロックデータが Network 上に流れるので気を付けなくはいけない。 専用のネットワークかVLANとかを組むのが定石らしいが、そうでない場合 IPSec が使うのが望ましいらしい。

設定が面倒で、大抵ノーガードですなぁ。

MacOSX でも普通にIPSecが使えるので、iSCSI のデータのみを保護する設定をしてみよう。

IPSec の設定内容

  1. Linux と Mac OSX の相互にIPSec接続をする。
  2. 既に iSCSI の設定が済んでおり、Linux側のiSCSIターゲットボリュームをMacOSX側のiSCSIイニシエータからマウントできる。
  3. IPSec はトランスポートモードで使い、iSCSI のデータ(3260/tcp)に限定する。
  4. IKE デーモンは racoon (IKEv1) を使う。
  5. 認証は事前共有秘密鍵/aggressive mode を使う。
  6. 暗号はAES/SHA1をなるべく使う。
役割IPアドレスホスト名
Linux 側iSCSIターゲット192.168.0.10/24 (固定)server1
MacOSX 側iSCSIイニシエータ192.168.0.20/24client1

SADの設定

基本的に、上りと下りのそれぞれで、サーバ側のIPアドレスとポート番号を指定すれば、iSCSI通信のみに限定できる。クライアント側は、DHCP等で振れる事を考えて範囲指定にする。

BSDの実装では PF tag なるものがあり「spdadd tagged」と組み合わせてフィルタルールに溶け込ませる事ができるそうなのだが、Linux側では同等の機能が実装されていないようなので残念ですなぁ。。。

Linux ターゲット側
# apt-get install ipsec-tools

/etc/ipsec-tools.conf

...
flush;
spdflush;

spdadd 192.168.0.10[3260] 192.168.0.0/24 tcp -P out ipsec esp/transport//require;
spdadd 192.168.0.0/24 192.168.0.10[3260] tcp -P in ipsec esp/transport//require;

Mac OSX のイニシエータ側

MacOSXでは、setkey 用の設定ファルの置き場がデフォルトでは用意されていないので、適当な場所に保存して、起動時に setkey コマンドで読み込み必要がある。

/etc/racoon/setkey.conf

flush;
spdflush;

spdadd 192.168.0.0/24 192.168.0.10[3260] tcp -P out ipsec esp/transport//require;
spdadd 192.168.0.10[3260] 192.168.0.0/24 tcp -P in  ipsec esp/transport//require;

racoonの設定

Linux/MacOSX ともに、racoon を使うので設定ファイル racoon.conf の内容はほぼ同じになる。ただし、事前共有秘密鍵ファイル psk.txt は、同じ鍵をそれぞれの相手側のものとして書く必要があり、ちょっと注意が必要。

Linux ターゲット側

/etc/racoon/racoon.conf

...
remote anonymous {
	exchange_mode aggressive,main;
	my_identifier fqdn "server1";	# サーバの認識情報
	dpd_delay 20;

	proposal {
		encryption_algorithm 3des;
		lifetime time 2 hour;
		hash_algorithm sha1;
		authentication_method pre_shared_key;
		dh_group 2;
	}
	generate_policy off;
}

sainfo anonymous {
	pfs_group 2;
	lifetime time 1 hour;
	encryption_algorithm aes, 3des;
	authentication_algorithm hmac_sha1;
	compression_algorithm deflate;
}
/etc/racoon/psk.txt
...
client1	secret1

Mac OSX のイニシエータ側

他にVPNなど IPSec を使うものと衝突する可能性がある気がしないでも無い。。。anonymous の部分をアドレス指定しれば、行けそうな気がするが。。。未検証。

/etc/racoon/racoon.conf

...
remote anonymous {
	exchange_mode aggressive,main;
	my_identifier fqdn "client1";	# クライアントの認識情報
	dpd_delay 20;

	proposal {
		encryption_algorithm 3des;
		lifetime time 2 hour;
		hash_algorithm sha1;
		authentication_method pre_shared_key;
		dh_group 2;
	}
	generate_policy off;
}

sainfo anonymous {
	pfs_group 2;
	lifetime time 1 hour;
	encryption_algorithm aes, 3des;
	authentication_algorithm hmac_sha1;
	compression_algorithm deflate;
}
/etc/racoon/psk.txt
...
server1	secret1

racoonは自動に起動しないので、適当名タイミングで起動する必要はある。

% sudo setkey -f /etc/racoon/setkey.conf
% sudo racoon
自動起動するには、「マスタリングIPsec 第2版」に記述の方法が簡単である。

確認

IPSec はアプリケーション側の修正の必要の無い物なので、、、普通にボリュームをマウントすると普通に使える。

まぁ気休めに、IPSec_SAをチェックすれば、

# setkey -D
192.168.0.20 192.168.0.10 
	esp mode=transport spi=131341201(0x07d41b91) reqid=0(0x00000000)
	E: aes-cbc  8250b455 59cc8799 c0d0b0b0 71b570a8
	A: hmac-sha1  6ff81843 b28130ed a5722694 32b134ee a0fc5b96
	seq=0x00000000 replay=4 flags=0x00000000 state=dying 
	created: Sep  8 14:51:43 2009	current: Sep  8 15:40:54 2009
	diff: 2951(s)	hard: 3600(s)	soft: 2880(s)
	last: Sep  8 14:51:45 2009	hard: 0(s)	soft: 0(s)
	current: 50750612(bytes)	hard: 0(bytes)	soft: 0(bytes)
	allocated: 49393	hard: 0	soft: 0
	sadb_seq=1 pid=1233 refcnt=0
192.168.0.10 192.168.0.20 
	esp mode=transport spi=17664308(0x010d8934) reqid=0(0x00000000)
	E: aes-cbc  5d2d422b fe916f6d 501fedce e3d9650d
	A: hmac-sha1  6cfbf657 2eb74cb3 b64b5074 e34148b9 7bcaf934
	seq=0x00000000 replay=4 flags=0x00000000 state=dying 
	created: Sep  8 14:51:43 2009	current: Sep  8 15:40:54 2009
	diff: 2951(s)	hard: 3600(s)	soft: 2880(s)
	last: Sep  8 14:51:45 2009	hard: 0(s)	soft: 0(s)
	current: 2142076(bytes)	hard: 0(bytes)	soft: 0(bytes)
	allocated: 26881	hard: 0	soft: 0
	sadb_seq=2 pid=1233 refcnt=0

ついでに tcpdump でサーバ側のパケットの流れを見れば、ESPパケットが飛び交ってるのが見える。。。

# tcpdump -i eth0 not port 22
...
15:38:24.183860 IP client1 > server1: ESP(spi=0x07d41b91,seq=0xc0ba), length 116
15:38:24.184162 IP server1 > client1: ESP(spi=0x010d8934,seq=0x68e6), length 116
15:38:24.184625 IP client1 > server1: ESP(spi=0x07d41b91,seq=0xc0bb), length 68
15:38:27.186886 IP client1 > server1: ESP(spi=0x07d41b91,seq=0xc0bc), length 116
...

まとめ

SADの設定をちまちま行えば、他の通信もIPSecで保護が出来そうである。気になるのは、パフォーマンスがどこまで劣化するかなのだが。。。あまり期待は出来ないのかなぁ。。。

2009年9月3日

Time Machine を iSCSI 経由で使う (1) - 設定

Leopard から実装された Time Machine は非常に使い易い。 ただ、常にノートブックに外付けのHDDをぶら下げるのは、可搬性が損なわれる。 Time Capsule を使えば良いのだが、約10M Byte/s 位しか出ないらしい。

どうも iSCSI 経由で外部ストレージを繋げてバックアップ先に指定すれば、いい感じになれるらしい。

最近 Linux でよく使われているターゲットは「iSCSI Enterprise Target」であり、Debian lenny からカーネルモジュールもパッケージ化されており、apt 一発で使える。また、ストレージ層は Linux に依存しており、フォーマット縛りが無い。そのため、HDD単体をiSCSI経由で接続して使っていた場合、そのHDDをUSB等の変換アダプタで直に接続しても、そのままで使える利点がある。

Mac OSX のイニシエータは標準では用意されていないが、サードベンダー製の「globalSAN iSCSI Initiator for OS X」が無料で制限なしで利用できる。

コイツらを組み合わせると、Time Machine の初期化やリカバリ時だけマシンに直付けして、差分バックアップ運用時はiSCSI経由で行う事が出来る。

Linux で iSCSI target 設定

設定の内容は、

  1. お手軽な単方向CHAP認証を使い、ユーザ名 iscsiadmin /パスワードは12~16文字の適当な文字列にする。
  2. IQN(ISCSI Qualified Name)は iqn.YYYY-MM.domainなんたらをユニークになるように適当に付ける。
  3. デバイスの名前に関しては、固定される用に /dev/sd? ではなく /dev/disk/by-id/? を使う。
  4. イニシエータ制限をサブネット範囲でかけておく。

Debian lenny にバイナリパッケージが用意されている。

# apt-get install iscsitarget iscsitarget-modules-2.6-amd64

/etc/default/iscsitarget

ISCSITARGET_ENABLE=true
/etc/ietd.conf
IncomingUser iscsiadmin 123456789012

Target iqn.2009-09.com.example:stroage.fileserver.timemachine
	IncomingUser iscsiadmin 123456789012
	Lun 0 Path=/dev/disk/by-id/scsi-XXXXXX,Type=blockio
/etc/initiators.allow
ALL xx.xx.xx.xx/24
うんで、/etc/init.d/iscsitargt start で、iSCSI ターゲットのサービスを有効化する。

Linux の Open-ISCSIを使って確認

適当な iSCSI イニシエータが必要なので、Open-iSCSI を設定して確認する。

# apt-get install open-iscsi
/etc/iscsi/iscsid.conf
...
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiadmin
node.session.auth.password = 123456789012
...
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = iscsiadmin
discovery.sendtargets.auth.password = 123456789012
...
うんで、/etc/init.d/open-iscsi start で、iSCSI イニシエータのサービスを有効化する。

取り敢えず、検索すると

# iscsi_discovery xx.xx.xx.xx
iscsiadm: No active sessions.
Set target iqn.2009-09.com.example:stroage.fileserver.timemachine to automatic login over tcp to portal xx.xx.xx.xx:3260
Logging out of session [sid: 5, target: iqn.2009-09.com.example:stroage.fileserver.timemachine, portal: xx.xx.xx.xx,3260]
Logout of [sid: 5, target: iqn.2009-09.com.example:stroage.fileserver.timemachine, portal: xx.xx.xx.xx,3260]: successful
discovered 1 targets at xx.xx.xx.xx
何となく、ターゲットが発見できる。

ついでに、ノードに接続して確認すると

# iscsiadm -m node -p xx.xx.xx.xx -l
Logging in to [iface: default, target: iqn.2009-09.com.example:stroage.fileserver.timemachine, portal: xx.xx.xx.xx,3260]
Login to [iface: default, target: iqn.2009-09.com.example:stroage.fileserver.timemachine, portal: xx.xx.xx.xx,3260]: successful
# cat /proc/scsi/scsi
...
Host: scsi27 Channel: 00 Id: 00 Lun: 00
  Vendor: IET      Model: VIRTUAL-DISK     Rev: 0   
  Type:   Direct-Access                    ANSI  SCSI revision: 04
...
# iscsiadm -m node -p xx.xx.xx.xx -u
Logging out of session [sid: 7, target: iqn.2009-09.com.example:stroage.fileserver.timemachine, portal: xx.xx.xx.xx,3260]
Logout of [sid: 7, target: iqn.2009-09.com.example:stroage.fileserver.timemachine, portal: xx.xx.xx.xx,3260]: successful
まぁ、ディスクが見える!

Mac OSX 上での設定

globalSAN iSCSI Initiator for OS Xから、パッケージをインストールして再起動し、GUIに従って設定すれば良い。

  1. 「システム環境設定」から「globalSAN iSCSI」を選択
  2. 「Portals」タブで、ターゲットマシンのIPを追加する。このとき、「Advanced Settings」で、CHAP認証を有効にして、User Name/Target Secret をISCSIターゲットで設定したものにする。
  3. 「Targets」タブにISCSIターゲットのIQNが見えるようになる。
  4. ISCSIターゲットのIQNを選択して「Log On」をする。
  5. 後の扱いはローカル接続のHDDと同じで、必要に応じて「ディスクユーティリティ」で初期化する。

Time Machine の設定は、ローカル接続のHDDと同じような扱いで、HFS+のボリュームを作って指定すれば普通に使える。。。快適じゃぁ。。。

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...