RAID - Redundant Arrays of Independent (Inexpensive) Disks

  • 別名
    • RAID システム (RAID system)
    • RAID アレイ (RAID array)

説明

複数台のディスクドライブを組み合わせる事で高速・大容量で信頼性に優れたディスクシステムを構築する技術.
RAID のルーツは,1987年にアメリカのカリフォルニア大バークレイ校 (University of California, Berkeley) で Patterson,Gibson,Katz の 3名が連名で発表した「A Case for Redundant Arrays of Inexpensive Disks」というタイトルの論文だとされる.

ハードディスクの大容量化と低価格化は目覚ましく,今ではパーソナルコンピュータ・レベルでも,100GB 以上のディスクを搭載したマシンも標準になっている.これに伴って,サーバ側ではさらに大容量のディスクが搭載されるようにになってきた.
しかし,ディスクの大容量化が進めば進むほど,万が一のディスク障害時に受ける被害は大きくなる.また,動画の再生やキャプチャ等,大量のデータを高速に読み書き可能なディスクシステムも求められるようになった.RAID は,こうしたディスクシステムの信頼性,耐障害性,処理性能の向上を実現するための技術として,PC をベースとするサーバシステム等でも広く活用されるようになった.

カリフォルニア大バークレイ校の3人が論文を発表したころ,RAID の「I」は「Inexpensive」を意味していた.これは,当時ディスクシステムの高速化,大容量化を図るには,高価な専用ディスク装置を利用するのが一般的だった.これに対し論文では,市販の安価 (Inexpensive) なハードディスクを利用する事を前提にしていた為である.現在では高速な専用ディスク装置が廃れていることもあって,独立した個々のディスクを用いるという意味で「Independent」を RAID の「I」とすることが一般的になった.

RAID の方式

RAID を実現する方式として,OS などに用意されたソフトウェアを利用して RAID 化する方式と,RAID 専用ハードウェアを利用する方式の 2つに大別される.WindowsNT系 の OS には,標準でソフトウェア RAID を実現する機能が組み込まれており,専用カード等を用意しなくても RAID 環境を構成する事が出来る.

ただし,ソフトウェア RAID では,ディスク I/O に少なからず RAID 処理の為のオーバーヘッドがかかるので,本格的なサーバシステムでは,ハードウェアでの RAID の各種処理を実行する,ハードウェア RAID コントローラを用いるのが一般的である.

現在,安価に販売されている ATA-RAID カードは,そのほとんどがソフトウェア処理によるものであり,カード自体はハードウェアに属するが,RAID として考えるとソフトウェア RAID と呼ぶに相応しいものが多く販売されている.しかし,これらの製品が使えないわけでは無く,OS のインストール領域の多重化の為や,クライアント PC での動画のキャプチャの為など,用途は幅広く使う事が可能である.

RAID では,複数ドライブへの分散書き込み,複数ドライブからの分散読み出しを行うストライピング (striping),同一のデータを複数のドライブに書き込むミラーリング (mirroring),データエラーを検出するパリティ・チェック (parity check),エラー検出,訂正を行う ECC (Erro Check and Correction)といった技術を組み合わせて使用する.一言で RAID といっても,具体的な RAID の構成には,仕組みによって RAID0 から RAID5 までの 6種類の分類があり,これらを RAID のレベルと称している.

RAID のレベル

RAID0

ストライピングによって,複数のディスクをあたかも1台のディスクであるかのように扱えるようにするもの.最低 2台以上のディスクを組み合わせ,ディスクへの書き込み処理や,ディスクからの読み出し処理を複数のディスクに分割し,同時並列的に実行することでアクセス速度を高速化する事が出来る.ディスクの大容量化や高速化の目的で使われるのが一般的で,ディスク容量は,接続されたディスク容量の総和となる.
ただし,後述する RAID1 や RAID5 のような冗長性は一切備えておらず,耐障害性は低くなる.これは,複数ディスクのうち,どれか 1台でも障害が発生した場合ディスク全体が読み書き不能になるという欠点がある.

特徴としては次のとおり

  • 接続されたディスク容量全体を利用できる
    • 200GB x 3 なら 600GB 全てが利用可能
  • データを分散させて保存する為,読み出し,書き込みの両方で性能が向上する
    • 1台あたりに書き込むデータが少なくなるので,論理的には 1/n の時間で読み書きが終わる
  • 耐障害性は低い
    • 複数のディスクに分散して書き込む為,1台故障するとデータの復元が出来なくなる

RAID1

ミラーリング技術を利用して,同一のデータを複数のディスクに書き込み一方のディスクが故障しても,他方のディスクを利用して処理を続行できるようにし,耐障害性を高めるもの.通常はディスク 2台を使用して実現するが,RAID システムにもよるがそれ以上の台数でも問題ないものもある.
RAID1 では,同一のデータを複数台のディスクに書き込む為,ディスクの使用効率は低い.例えば 2台のディスクを使用して RAID1 構成とした場合,ディスク効率は 1/2 となってしまう.n台の構成ならば 1/n となる.
書き込み性能は,通常のディスク処理とほぼ変わらず,読み出しは RAID システムによっては分散して読み出される為,高速に読み出す事が出来る製品もあるので,導入する際は確認が必要である.
ディスクの利用効率が悪いのが欠点だが,OS のインストール領域など,書き込みは頻繁では無いが,冗長構成が必要な場面では第一線の現役である.とくに,1U サーバやブレードサーバ等では当たり前に利用されている.

特徴としては次のとおり

  • 何台ディスクを接続しても,利用できるのは 1台分のディスク容量
    • ディスク効率は 1/n の容量になってしまう.
  • 同一のデータを複数のディスクに書き込む為,耐障害性が高い
    • 最後の 1台が壊れない限りデータは読み書き可能

RAID2

このレベルは現実のシステムではほとんど使用されることはない
RAID2 では,エラーを修復させる為の冗長コードを元のデータと共に複数のディスクにまたがって記録する.特徴として,冗長コードが多ビットの ECC ( Error Correcting Code: 誤り訂正符号 ) であることと,データを配分する際のサイズの単位がブロック (セクタ) 単位では無く, bit または byte 単位であることだ.
多ビットの ECC による冗長コードは,元のデータに対して,そのサイズが大きくなりがちで,容量面でのオーバーヘッドが大きいというデメリットがある.例えば,代表的な ECC の 1つであるハミング符号を用いると,元のデータを 2台のディスクに分散するには,冗長コードだけのために 3台のディスクが必要になってしまう.元のデータより冗長コードの容量を小さくするには,元のデータを格納するディスクを 4台以上にしなければならない.
また,ECC の計算は,パリティより複雑で時間がかかってしまう為,速度面でもオーバーヘッドが大きい.こうしたデメリットが大きい事や後述する技術が出てきた為,ほとんどの市販の RAID 製品に RAID2 は実装されていない.

RAID3

このレベルは現実のシステムではほとんど使用されることはない
RAID3 も,元のデータに冗長コードを加えて,複数のディスクに記録する技術である.冗長コードには,後述する RAID5 と同様にパリティ・ビットを採用する.RAID5 と大きく異なる点は,

  • 各ディスクにデータを配分する際の単位サイズが,ブロック (セクタ) 単位ではなく,bit または byte 単位である
  • パリティが特定のディスクに保存される (全ディスクには分散されない)
  • 高速化を実現する為には,複数のディスクを完全に同時に読み書きする為の同期機能が必要 という点が RAID5 とは違う.特に最後の条件を満たすには,他のディスクと同期して回転させたり,データ転送する為の仕組みを持った特殊なディスクが必要となるほか,ディスク毎にバスを別々に設けて RAID コントローラと接続する事が必要になるなど,コスト面で他の RAID レベルより大きなデメリットとなる.この為,市販の RAID 製品で RAID3 を実装している製品は少ない.

RAID4

このレベルは現実のシステムではほとんど使用されることはない
RAID4 は,後述する RAID5 と同様に,元のデータからパリティを生成して,ブロック単位で複数のディスクに記録する,という点でよく似ている.異なるのは,パリティを全ディスクに分散させるのではなく,特定のディスクだけに格納する点だ.つまり,元のデータとパリティをそれぞれ格納するディスクが別々に分かれている.この為,RAID4 では,データの書き込みが発生すると,パリティ用のディスクへの書き込みが集中してしまい,それがボトルネックとなって書き込み性能が下がってしまう.このデメリットをパリティの分散書き込みによって改善しているのが RAID5 である.
こういった歴史の為,RAID4 は RAID5 に代替されてしまい,RAID4 をサポートする RAID 製品はほとんど無い.

RAID5

複数のディスクに,データとパリティ情報を記録する事によって耐障害性を高めたもの.データをディスクに記録する際,そのデータのパリティ情報を計算しデータと共にストライピングによって複数のディスクに分散して書き込まれる.
このようにディスクに書き込まれる事により,ディスクの 1台が故障しても残ったデータとパリティ情報から逆算し,壊れたデータを修復する事が出来る.パリティに必要な情報はディスク 1台分ですむ為,ミラーリング (RAID1) よりもディスクの利用効率が高い.

ディスクからの読み出し時は,複数のディスクから読み出される為高速だが,書き込み時はパリティ情報を計算しなければならず,その分のオーバーヘッドが生じる.
また,ディスクが 1台故障した際は読み出し時にデータとパリティから失ったデータの復旧を行う為に遅くなる.

RAID6

RAID6 は,RAID5 の改良版といえる技術で,1つのデータブロックにつき,2つのパリティを生成する.これによって,同時に 2台のハードディスクが故障しても,元のデータを修復可能としている.この耐障害性の高さが RAID6 のメリットである.
しかし,パリティが増えた分,その計算や書き込みのオーバーヘッドも RAID5 と比べて増大してしまう為,特に書き込み性能は良くない.また,パリティ用に 2台分のディスク容量を必要とする為,ディスクの利用効率は RAID5 より下がる.また,後述するホットスペアという技術を組み合わせることによって代替出来なくは無い為,RAID6 は主流にはなっていない.ただし,RAID5 + ホットスペアという組み合わせでの2台同時故障はデータの復旧が出来ない為,データの重要性などを考慮したうえで RAID6 + ホットスペアという組み合わせを採用している所もある.

RAID 技術の組み合わせ

RAID10 (RAID0+1, RAID1+0)

RAID0 では耐障害性が低いこと,RAID1 では複数のディスクをまとめて,単一の大容量ディスクを構築出来ない事が,それぞれのデメリットである.しかし,この 2つの RAID レベルを組み合わせることによって,両者のデメリットを打ち消し,両者のメリットを享受出来ることになる.この 2つの RAID レベル組み合わせ技術は,RAID10 あるいは RAID0+1,RAID1+0 などと呼ばれる.
この組み合わせの RAID は,RAID1 によって耐障害性を,RAID0 によって大容量化と高速化を実現する.最低限必要なディスクの台数は 4台と他の RAID レベルより多い.
2台のディスクを 1セットとして RAID1 でミラーリングし,耐障害性を確保し,このセットを複数用意してこれらを RAID0 でストライピングする.こうする事で,ディスクが故障しても RAID0 ストライプが壊れる事は無い為,通常通りの使用が可能になる.
また,製品によっては,RAID0 のストライプを2セット用意し,RAID1 でミラーリングするといった製品もある.4台速度や容量は先の方法と変わらないが,それ以上のディスクを RAID10 化する事は不可能な為,この様な方法を採用する所は少ない.

RAID50 (RAID0+5,RAID5+0)

RAID0 と RAID5 を組み合わせた RAID 技術のことを,RAID50 あるいは RAID0+5,RAID5+0 などと呼ぶ.これも前出の RAID10 同様,標準として定められている技術ではなく,ベンダによって呼称や実装形態が異なる.基本的に,前出の RAID0 と RAID1 を組み合わせた RAID の動作原理において,RAID1 で構成されていたディスクアレイを RAID5 で構成したものに置き換えた技術である.単なる RAID5 に比べ,RAID0 によるストライピングによってデータ転送速度が向上する事が一番のメリットである.また,ディスクの使用効率も,RAID10 と比べると高い.ただし,最低限必要なディスクの台数は 6台と多くなるのが欠点だ.

その他の技術と補足

JBOD (Just Bunch Of Disks)

通常,RAID 構成をとる際は構築する RAID レベルにかかわらず,同一のディスクを使用する必要がある.もしくは,容量が少ないディスクを基準として容量の大きいディスクを混在させる事も出来る.使用するディスクに容量の違いがある場合,容量の大きいディスクには使われない領域が発生する事になる.ディスク容量の違うものを複数束ねて 1つの大きなディスクとして使用したい場合に利用する技術が JBOD と呼ばれる技術である.
JBOD は RAID0 と違い,ストライプせず,設定時に設定したディスクの順番どおりにデータを書き込んでいく為,速度の向上は望めない.また,いずれか 1つのディスクが故障した場合はデータは失われてしまう(無理やり読み出す方法もあるが,壊れたディスクのデータは復元できない).

ホットスワップ (hot swap)

ホットスワップとは,着脱可能な電気機器を,システムが通電された状態のまま取り外しが出来,代替機器と交換する操作の事を指す.システムを止める事なく,一部の部品だけをホットスワップで交換する事により,ユーザに対するサービスを中断させずにシステムの修理や機能の向上を図ることが出来る.
一般的に,通電された状態の電気回路では,何の対策も行わず,電気信号の配線を突然切り離した場合,電気回路が故障する事がある.その為,ホットスワップ対応の電気機器は,回路が故障しないよう,特殊な対策が施されている.例えば,大きな電流が流れる電力線が切り離される前に,電気信号の配線を切り離す,などといった工夫だ.コンピュータ機器の場合は,取り外す前に,その機器へのアクセスを停止するといったソフトウェア処理も必要になってくる.
RAID により,耐障害性を高めているディスクシステムでは,故障したディスクを交換する際,いちいちシステムを停止させずに済むよう,ホットスワップ対応のドライブベイを導入している機器が多い.その場合,故障したディスクをドライブベイから取り外し,新品に取り替えるといった作業の間,システムはサービスを止める事なくユーザに提供し続ける事が可能になる.当然ながら,ホットスワップ非対応の場合は,いったんコンピュータを停止し,電源を切り,ディスクを交換してから再起動する必要がある.

ホットスペア (hot spare)

ホットスペアとは,電気機器の故障に備えて,あらかじめ予備の代替機器を通電状態で待機させておく事や,あるいは,待機状態にある予備の機器の事を指す.ホットスタンバイあるいは,オンラインスタンバイとも呼ばれる.ホットスペアを用意しておけば,ある機器が故障したとき,その代わりに予備の機器を稼動させ,故障発生前の状態に修復する,という作業を自動化する事が出来る.
RAID によって耐障害性を高めているディスクシステムでは,多くの RAID 機器でホットスペアが実装されている.ホットスペア用として設定されたディスクは,通電されたい気状態にある.もし,1台のディスクが故障した場合,ディスクシステムを管理している RAID コントローラは,故障したディスクを論理的に切り離し,ホットスペア用ディスクを起動する.そして,残っているデータとパリティ情報などからホットスペア用ディスクに必要なデータを書き込み,元の正常な状態に復旧させる.以上の処理が全て自動的に実行されるのが,ホットスペアのメリットである.ホットスペア用ディスクを用意していない,または,ホットスペアが未サポートの場合は,ディスクの交渉時には,手動で正常ディスクに交換するまで,ディスクシステムは耐障害性や性能が低下した状態で運用せざるを得なくなる.


Hiroyuki Seino http://www.seichan.org/ http://www.seichan.org/wiki/
Today:2 Yesterday:0 All:14527