iSCSIってネットワーク?ストレージ?(1)

iSCSITCP/IPのIPパケットにSCSIデータをカプセル化して運びます。そういう意味で、iSCSIの通信は完全にネットワークそのものです。しかしiSCSIはFCと同様にブロックレベルのSCSI I/OのためのSANを構成するための仕様という意味では、ストレージといえます。

EthernetではあってもFCフレームをカプセル化するFCoEは厳密にはDCB (Data Center Bridging) / CEE (Converged Enhanced Ethernet)を必要としますので、「これまでのEthernet*1のためのスイッチやNICでは使用することはできません。低遅延やロスレスなどのFCレベルの信頼性を確保することを重視したために、既存との互換性を犠牲にしたともいえます。

Ethernetそのものの信頼性は確かに高くはありませんが、スイッチが物理的に持つPort Bufferingであったり、802.3xによって規定されるFlow Controlなどの仕組みによって一定の信頼性は確保されるようにはなっています。
とはいえ、iSCSIはストレージI/Oのための通信となりますので使うべき規格と使うべきではない規格があります。使うべき規格としてはJumbo Frameがあります。Ethernetの標準フレームサイズ(MTU : Maximum Transfer Unit)は1518バイトですが、Jumbo Frameでは最大9018バイトまで拡張されたMTUをフレームとして扱うことができるようになります。NICと通信経路上にあるすべてのEthernetスイッチにおいてJumbo Frameが有効となっている必要がありますが、通信を利用するアプリケーションの通信バッファサイズが大きければ大きいほど、Jumbo Frameを使用することのメリットは大きくなります。逆に使うべきではない規格としてはSpanning Treeでしょうか。iSCSI通信専用のEthernetネットワークを構築できるのであれば、Spanning Treeを必要としないネットワーク構成とすることができるはずです。RSTPやPort Fastによってしっかりと設計すればよいともいえますが、使わなくて済むなら使わない構成の方がよいでしょう。
どちらにすべきなのかが状況次第といえるものが、EthernetスイッチにおいてStackingを使うべきなのか、Trunkingを使うべきなのか、ということです*2。この比較はiSCSIネットワークと接続されるサーバやストレージなどの台数などによってもどの構成がよいのかが変わってきます。一般的には、Ethernetスイッチが2台で収まる程度の小規模環境の場合はTrunkingを、3台以上必要とする様な大規模環境の場合はStackingを用いるということになるでしょう。もちろん、Trunking構成においてはLAGは必須ですし、Stacking可能なスイッチは限られていますので、モノ選びからこのあたりは考えておく必要があります。場合によっては、TrunkingやStackingによる「つなぎ」のボトルネックを気にしなくても済むようにより高速なバックプレーン通信が可能となるモジュール型スイッチに統合してしまうというやり方もよいかもしれません。
iSCSI通信をL2とするか、L3とするかについても技術的にはどちらも可能ですが、基本的にはiSCSI通信はサーバからストレージまでの経路を1つのL2ネットワークとして構成すべきでしょう。DRなどではL3が必要になる場合が多いかと思いますが、L2でよい構成においてわざわざL3にする必要性はありません。セキュリティはVLAN/PVLANやACLによって十分に確保することが可能です*3iSCSI仕様自体にも、CHAP認証などによるセキュリティが含まれています。
iSCSI側の実装の話に入るまでにだいぶ長くなってしまいました。今回もまた、次回に続くということにしたいと思います。

*1:802.3 Ethernet規格に基づく仕様

*2:iSCSI用ネットワークの構成は、使用するiSCSIストレージ装置の仕様によって大きく異なります。単一のEthernetネットワークを必要とする機器や、2つのセグメントに分離したネットワーク構成が推奨される機器など、iSCSI通信の実装次第で異なります

*3:iSCSI通信以外とEthernetスイッチを共有する場合はVLANで分割するべきです。