ストレージの種類
ストレージは大きく分けて2種類あります。
1つは『ファイルストレージ』で、一般的には『NAS(Network Attached Storage)』と呼ばれています。もう1つは『ブロックストレージ』で、これはさらにSASケーブル等の専用ケーブルでサーバと直結する 『DAS(Direct Attached Storage)』と、SAN(Storage Area Network)というネットワークでサーバと接続する『SANストレージ』の2つに分かれます。
この記事ではこれらの違いを分かり易く説明していきます。
なお、ストレージ製品によっては全てを兼ね備えていたり、1つしか使えなかったりと、カバーする範囲は異なります。
DAS とは
DAS とはブロックストレージの1種で、主に SAS ケーブルを使ってサーバと直接(Direct)に接続されます。構成としてはエンクロージャと呼ばれる筐体が中心となり、エンクロージャにHDD(玉)を詰めていきます。
ストレージの種類によって搭載できるHDDの数や利用できるHDDの種類、RAIDコントローラの種類などが決まっています。
例えば DELL の『PowerVault MD1000』という DAS だと1つのエンクロージャに SAS/SATA のいづれかを 15個搭載でき、エンクロージャを6つ拡張でき、RAID は 0,1,5,6,10,50,60 が使えます。
DAS(ストレージ機器)自体はファイルシステムを理解しません。フォーマットも自らは行いませんし、行われてもそれを理解しません。サーバに 0/1 の bit を読み書きするスペースを貸し出すだけです。
一方、サーバOSは DAS の領域をファイルシステムとして認識します(認識しない場合はフォーマットする)。その上で、(SAS接続の場合は)SCSI コマンドによりブロックレベルでのアクセスを行います。最近のOSではブロックサイズ=4KB程度ですので、1アクセスにつき 4KB の Read or Write を行います。上図の例では LBA(Logical Block Address:論理ブロックアドレス)の25番を指定して 4KB の書き込みを SCSI コマンドで命令しています。DAS側では LBA を物理アドレスに変換して書き込みを行います。
NAS とは
NAS とはファイルストレージのことで、IPアドレスを持ち、IPネットワークに接続して使われます。特徴としては、競合を気にすることなく、複数のサーバOSが同時にNASを利用できます。
プロトコルは主に CIFS(SMB) と NFS の2種類です。
NAS も DAS と同様、種類によってHDD搭載数、扱えるHDD/RAIDコントローラの種類が決まっています。
DASと異なり、NAS自体がファイルシステムを構成し、認識します。そのため、DASと異なり、要求はファイル/フォルダ単位で処理されます。
具体的には、サーバOS は NAS に対し『資格情報(ユーザID等)』と『アクセスしたいファイル』と『ファイルに対する操作(Read/Write等)』を送信します。NAS はアクセス権に問題が無いことを確認した上で、処理を実行し、結果をサーバOSに返します。
複数サーバOSからの同時アクセスに対しては待ち行列を使って順に処理をしていきます。必要に応じてロック(排他)するため、基本的に競合を起こしません。
なお、このように NAS は高次元な処理を行うOSが必要となり、このような OS を一般的に『NASヘッド』と呼びます。NASヘッドは Windows や Linux 等の一般的なOSであったり、ストレージメーカ独自OSだったりします。
SANストレージとは
SANとは『Fibre Channel(ファイバチャネル,略称FC)』や『FC over Ethernet(読み方:エフシーオーイー, 略称FCoE)』、『iSCSI(読み方:アイスカジー)』といったプロトコルを使って DAS と同じようにブロックアクセスを行わせる、ストレージ専用ネットワークのことです。
そして SANストレージは、SAN を介してサーバと接続される、ブロックストレージの一種です。
FC/FCoE/iSCSI のいづれのプロトコルも SCSI コマンドをカプセル化するものですので、基本的には DASと同様のブロックアクセスを行います。つまり、SANストレージはファイルシステムを理解せず、接続元であるサーバOSがファイルシステムを理解した上で SANストレージに SCSI コマンドによるブロックレベルでのアクセスを行います。
FC のメリットはオーバーヘッドが少なくパフォーマンスが良いことです。一方デメリットは、インタフェース(HBA=ホストバスアダプタ)や(冗長化のための)ファイバチャネルスイッチ等が独自規格のため高価であることです。なお、ケーブル自体は 10GBase-LR 等で使う一般的なシングルモード/マルチモードの光ケーブル、LC等の一般的なコネクタのものが利用可能です。
一方、FCoE や iSCSI は大量生産が可能な Ethernet インタフェースを使うためコスト削減ができるのがメリットです。
FCoE は SCSI コマンドを Ethernet にカプセル化するため、オーバーヘッドは Ethernet ヘッダ分だけで済みますが、サーバと同一ブロードキャストドメインに存在する必要があります。
iSCSI は SCSI コマンドを Ethernet および IP にカプセル化しますので、ルーティングによりIPネットワークを横断できますが、オーバーヘッドは Ethernetヘッダ+IPヘッダになります。
ブロックストレージを共有ストレージとして扱う場合の注意点
一般的にブロックレベルのアクセスは、ストレージが全体像を理解していないため、複数のホストが互いに相手領域に侵食する(競合する)ことを防げません。
例えば複数仮想ホストから SASケーブルで 1つの DAS に接続したり、iSCSI で複数イニシエータから1つのターゲットにログインしたり等で、LUN を複数ホストから共有する場合、何もしないとお互いの領域を破壊し合うシナリオも起こりえます。
ですがサーバ仮想化において、ブロックストレージを共有ストレージとして利用するのはごく一般的であり、ソフトウェアベンダの考慮が行き届いていたりもします。
例えば VMware では VMFS というクラスタファイルシステムを使うため『オンディスクロック』という機能により排他を行い、安全性を確保できます。
KVM では virtlockd による排他処理や、クラスタLVMによる排他処理など、実装がいくつかあるようで、実際にどのようにするか検討・設計する必要があります。