RAIDについて
昔書いたRAID規格の整理表。
実質RAID50/51はいらないかなぁ。まぁ、メモって事で。
http://ja.wikipedia.org/wiki/RAID | |
規格 | 説明 |
RAID0 | 耐故障性のないディスクアレイ方式。複数のディスクをつなげて単純に1台に見せる。コンキャットネートディスク(Concat)ということもある。 |
RAID1 | 二重化(ミラーリング/Mirror)方式。複数台のディスクを完全に同期させ、同一の情報を持つ完全なコピーとして動作させる。耐障害性に優れているが、効率は悪い。また、RAIDの最大の弱点であるコントロー>ラーの故障にも対応しやすい。RAID1は最低でも2台のHDDが必要である。 |
RAID1+0 | RAID0によってConcatしたDiskをRAID1によってMirrorすることによって作られるディスク。大容量で、完全に二重化されているため、耐障害性に優れている。なお、RAID0とRAID1を組み合わせて利用する場合、先にRAID1を用いてMirrorしたDiskをRAID0を用いてConcatするべきである。これは、Concatするディスクがすでに二重化されているためにRAID0を構成する全ディスクの耐故障性が高まってるからである。 |
RAID2 | ビット単位での専用誤り訂正符号ドライブ方式。ハミングコードを用いたECCによる冗長化機構を利用しているため、全RAID中もっとも耐障害性に優れている。現在のHDDの信頼性は、ECCを用いる必要があるほど低くないため、RAID2を利用することはなく、市販製品もない。 |
RAID3 | ビット・バイト単位での専用パリティードライブ方式。RAID2における誤り訂正符号作成方式を排他的論理和(XOR)によってパリティーに変換する手法に置き換え、演算コストを低減した物である。最低3台のHDDを利用し、1台を誤り訂正政府号に割り当て、残り複数台にデータを記録する。RAID5によって効率・性能が大幅に改善されたため、現在ではRAID3は利用されない。 |
RAID4 | ブロック単位での専用パリティードライブ方式。RAID2,RAID3と同様、最低3台のHDDが必要となる。RAID3では、ビット・バイト単位で誤り訂正を行うため、I/O効率が低い。この問題をブロック単位で扱うことによって改善した物である。RAID5によって効率・性能が大幅に改善されたため、現在ではRAID4は利用されない。 |
RAID5 | ブロック単位でのパリティー分散記録方式。RAID5は複数のハードディスクに誤り訂正符号データと共に分散させて記録することで、RAID3、RAID4のボトルネックを回避する方式であルーターだし、読み出しは>高速に行えるが、パリティー計算を行う必要があるため書き込みは遅くなる。RAID5は耐故障性、読み出し速度の面から、現在最も利用されているRAID手法である。 |
RAID5+0 | RAID10と同様にRAID5で構成されたディスクをConcatすることで、耐故障性の高い巨大なディスクを作成する手法。近年ではHDDの大容量化が進み、RAID 50を必要とする局面はあまり無くなっている。 |
RAID5+1 | RAID5で構成されたディスクセットをRAID1でMirrorする手法。近年HDDの大容量化が進んだため、HDD1台が故障した場合のRAID5の復旧に時間がかかるようになっている。この問題を回避するため、完全に冗長化された仕組みをもってディスクを構成する場合にRAID51を用いる。 |
RAID6 | フロック単位での複数パリティー分散方式。HDDを最低4台必要とする。RAID5では、同時に2台のディスクが故障した場合(復旧中にディスクが故障する場合も含む)対応ができない。この問題に対応するために開発された。パリティー情報を複数作成するため、RAID 5よりもさらに書き込みが遅くなる。 |
RAIDZ | ZFS上に実装されたRAID同等の機能。RAID5やRAID6には、パリティ更新時に何らかの障害が発生した場合、データとパリティが一致しなくなり、システム上では正常に見えても内部ではデータ破壊が進んでいるという状態(サイレントクラッシュ)に陥るという致命的な欠点がある。またストライプ幅より小さいデータを書き込む際、全体のデータとパリティを読み込んで再計算をする必要があり、パフォーマンスが著しく低下するという弱点もある。RAIDZは常にストライプ全体への書き込みを行う。これに、コピーオンライトを組み合わせることによりRAID5やRAID6が持つサイレントクラッシュの問題を完全に回避できる。 |
RAIDZ1 | パリティが1つのRAIDZ (RAID5相当) |
RAIDZ2 | パリティが2つのRAIDZ (RAID6相当) |
RAIDZ3 | パリティが3つのRAIDZ |
RAIDの遅さ
RAID/RAIDZは、読み出し、書き込み時に、Parityを再計算して問題がないことを確認する。これは、たとえばRAID5において512Bytesのデータを読み出す場合、512*3(Disk書き込みの最小単位。最近では4Kのものもあるが分かりやすく考えるためにあえて512Bytesで考えている)の読み出しを行う。これは、読み出しに余計な時間がかかるということであり、特に細かいファイルを大量に読み出す際に性能劣化が発生するということを意味する。
RAIDによる冗長性+容量を採るか、Mirrorによる冗長性+読み出し速度を採るかは状況によるが、特にHDDを利用する場合、大きく効いてくるので注意が必要。特に、AppleのTimeMachineを利用するのであれば、Mirrorを利用するなどの高速化を視野に入れる必要がある。
RAIDに関する若干の考察
自宅などでRAIDを用いたNASなどを構築するときのためのメモ
前提条件
- FreeBSDでZFSを利用するものとする
- 考慮対象は Mirror(RAID1), RAIDZ1, RAIDZ2、及びRAID0(Concat/Striping)とする
- 故障理由に書き込み寿命等の要件は考慮しないものとする
- Mirroringを採用した場合、
- 書き込み速度は1倍、
- 読み込みは並列読み込みできるものとし、n台のDIskでMirrorをするなら単純にn倍になるとする
- RAIDZを利用する場合、
- Parity計算にかかる時間は概ね無視できる(CPUに十分な計算力があると仮定)
- 書き込み速度は1倍(Parity計算を無視できるとする)
- 読み込み速度は1倍(ParityからのData再計算はしないとする)
仮定条件
- Diskへの書き込みに関して、Errorは出ない
実際には、HDDからの情報読み出しにおいては、回復不能なエラーが発生する可能性がある。 以下はSeagate製品のカタログから抜き出している。
- Consumer向けHDDで、 1bit/10^14bit 程度
- Enterprise向け高信頼HDDで 1bit/10^16bit 程度
これは、Consumer 向け2TB disk 5本で構築されたRAID5システムにおいて、一回全領域を読み出した場合、60%の確率で1bit、「回復不能」のエラーが発生する可能性があることを示している。なお、Enterprise向け高信頼HDDならば、同条件で1bitの「回復不能」エラーが発生する確率は単純に0.6%である。 つまり、Rebuildを実施した場合、Consumer向けHDDでは60%の確率でRebuildに失敗することを意味する。ただし、実際には、Disk容量を100%使い切ることはないであろうことから、失敗する確率はもう少し低くなると考えられる。
注意点
以下、Disk2本でRAIDZ1を組むという本質的には無意味な設定を検討している。 これは、実際には構築できない設定が含まれることを意味するが、思考実験でもあるので、注意して欲しい。
Diskが2本の場合
可能な選択は、
1 | Mirror | Disk 1本分 | READ 2倍 | WRITE 1倍 | 最小破損台数2台 | 最大故障台数1台 |
2 | RAIDZ1 | Disk 1本分 | READ 1倍 | WRITE 1倍 | 最小破損台数2台 | 最大故障台数1台 |
の2種類。
この場合、書き込み速度は変わらないが、読み出し速度はMirrorの方が単純に2倍早くなる Diskが1台故障した場合、復旧にかかる時間は、
- Mirrorの場合、単純なコピーで済む
- RAIDZ1の場合、Parityからのデータ再計算が必要になるため、CPUの計算量を無駄に消費する
結論:単純にMirrorを選択すべき。
以下、同容量での組み合わせでRAID vs Mirrorという条件が発生したらMirrorのみを考慮するものとする
Diskが3本の場合
可能な選択は、
1 | 3本Mirror | Disk 1本分 | READ 3倍 | WRITE 1倍 | 最小破損台数3台 | 最大故障台数3台 |
2 | 3本でRAIDZ2 | Disk 1本分 | READ 1倍 | WRITE 1倍 | 最小破損台数3台 | 最大故障台数2台 |
3 | 3本でRAIDZ1 | Disk 2本分 | READ 1倍 | WRITE 1倍 | 最小破損台数2台 | 最大故障台数1台 |
の4種類。
結論:実際に選択可能な選択は事実上(1)か(3)となる。
これは、必要となる容量と同時故障台数予測を以ってで考えるべき
・Diskが4本の場合 可能な選択は、
1 | 4本でMirror | Disk 1本分 | READ 4倍 | WRITE 1倍 | 最小破損台数4台 | 最大故障台数3台 |
2 | 4本でRAIDZ2 | Disk 2本分 | READ 1倍 | WRITE 1倍 | 最小破損台数3台 | 最大故障台数2台 |
3 | 4本でRAIDZ1 | Disk 3本分 | READ 1倍 | WRITE 1倍 | 最小破損台数2台 | 最大故障台数1台 |
4 | 2本でMirror、2setでMirror | Disk 1本分 | READ 4倍 | WRITE 1倍 | 最小破損台数4台 | 最大故障台数3台 |
5 | 2本でMirror、2setでRAID0 | Disk 2本分 | READ 2倍 | WRITE 1倍 | 最小破損台数2台 | 最大故障台数2台 |
の5種類。
- (1)と(4)は実質同等であるが、管理の複雑さを考慮すると、選択肢は(1)となる
- (2)と(5)は容量は等価。読み込み速度は(5)の方が2倍早くなるが、故障時のリスクが(5)の方が大きくなる
- (2)場合、Diskが2本破損しても稼働する
- (5)の場合、DiskをA,B,C,Dとした場合、(A,B)+(C,D)という構成とし、Aが破損したと考えた場合、
- C or Dが破損した場合は、稼働する
- Bが破損した場合、(A,B)が破損し、Volume全体が破損する
となるため、3台中2台までは破損しても稼働する=2/3=0.66台まで破損に対応できると考えられる。
障害復旧に関しては、(1)=(4)<(5)<(3)<(2)となる。
結論:実際の選択としては、(1),(2),(3)となる。これは必要となる容量に応じて検討するべき。 ただし、読み出し速度が重要な局面では、(2)の代わりに(5)を選択する局面がある
Diskが5本の場合
事実上可能な選択は
1 | 5本でMirror |
2 | 5本でRAIDZ2 |
3 | 5本でRAIDZ1 |
となる。
議論はDiskが4本の場合と同じ。ただし、Diskが4本の場合と異なり、(5)の選択肢はない
Diskが6本の場合
事実上可能な選択は
1 | 6本でMirror | Disk 1本分 | READ 6倍 | WRITE 1倍 | 最小破損台数6台 | 最大故障台数5台 |
2 | 6本でRAIDZ2 | Disk 4本分 | READ 1倍 | WRITE 1倍 | 最小破損台数3台 | 最大故障台数2台 |
3 | 6本でRAIDZ1 | Disk 5本分 | READ 1倍 | WRITE 1倍 | 最小破損台数2台 | 最大故障台数1台 |
4 | 2本でMirror、3setでRAID0 | Disk 3本分 | READ 2倍 | WRITE 1倍 | 最小破損台数2台 | 最大故障台数3台 |
5 | 2本でMirror、3setでRAIDZ1 | Disk 2本分 | READ 2倍 | WRITE 1倍 | 最小破損台数4台 | 最大故障台数4台 |
6 | 3本でMirror、2setでRAID0 | Disk 2本分 | READ 3倍 | WRITE 1倍 | 最小破損台数3台 | 最大故障台数4台 |
- 一般の用途において、5多重は考慮の対象から外して問題ない。従って、(1)は対象から外れる。
- (2)と(4)は容量が必要な場合に検討対象となる。
- (4)と(6)は読み込み速度が重要な場合に検討対象となる。
- ただし、(4)は、故障条件が厳しすぎて、実質1台の故障しか許容できないところに問題がある。
- 最小2台の故障でVolumeが壊れる。最大3台までは破損しない可能性もある
- (5)は、同時故障台数の許容量は大きいが、これなら(6)の方が有効
- Diskが5本以上ある場合、RAIDZ1では同時故障の許容度が低すぎる。これで問題がない場合もあるが、復旧時の負荷を考えると(3)は外さざるを得ない