RAID 再考
私がまだ新米のサービス技術者で、システム管理についてほとんど何も知らなかった頃、常に完全に理解しておくことが求められていた数少ないトピックの一つが RAID – Redundant Array of Inexpensive Disks(安価なディスクの冗長アレイ)でした。それはストレージの悩みすべてに対する答えでした。RAID を使えば、ファイルシステムをより大きくスケールし、より良いスループットを得て、ディスクの損失を乗り越えることができる冗長性まで追加できました。当時は特にディスク障害が非常に頻繁に発生していました。NAS や SAN ストレージアプライアンスの台頭により、物理ストレージレベルまで踏み込んでシステムのニーズに合わせて調整するスキルセットは急速に失われつつあります。これは良いことではありません。ストレージを外部デバイスにオフロードしているからといって、ストレージを根本的に理解し、システムの特定のニーズに合わせて設定する必要性がなくなるわけではありません。
過去 5 年から 10 年にかけて業界に入り込んだ誤解は、RAID がシステムバックアップを表しているという信念です。それは違います。RAID はフォールトトレランスの一形態です。バックアップとフォールトトレランスは概念的に非常に異なります。バックアップは災害が発生した後に復旧できるように設計されています。フォールトトレランスはそもそも災害の可能性を減らすように設計されています。フォールトトレランスを崖の上にフェンスを建てること、バックアップをその下に病院を建てることと考えてください。フェンスも病院もない状況には絶対になりたくないですが、それらは確実に異なるものです。
ドライブに RAID を実装する場合、ローカル接続か SAN のようなリモートアプライアンスかを問わず、今日のビジネスには 4 つの主要な RAID ソリューションから選択できます。RAID 1(ミラーリング)、RAID 5(パリティ付きストライピング)、RAID 6(ダブルパリティ付きストライピング)、RAID 10(ストライピング付きミラーリング)です。RAID 0 のように、ドライブサブシステムのニーズを本当に理解している場合に限り、まれな状況でのみ使用すべきものも他にあります。RAID 50 と RAID 51 も使用されますが、はるかに少なく、効果もそれほど高くありません。10 年前は RAID 1 と RAID 5 が一般的でしたが、今日ではより多くの選択肢があります。
オプションを確認して、基本的な数値を議論しましょう。例では、アレイ内のドライブ数を n で、個々のドライブのサイズを s で表します。これらを使って、アレイの使用可能なストレージ容量を表現し、ストレージ容量の観点から比較を容易にします。
RAID 1: この RAID タイプではドライブはミラーリングされます。2 つのドライブがあり、それらは同時にすべてを行います。これが「ミラーリング」です。ミラーリングはプロセスが非常にシンプルなため非常に安定していますが、2 番目のドライブが冗長性専用となるため、RAID なしで必要なドライブの 2 倍を購入する必要があります。利点は、ディスクに書き込むすべてのビットが保護のために 2 回書き込まれるという保証があることです。したがって RAID 1 の容量は(n*s/2)と計算されます。RAID 1 は非 RAID ドライブと比較してパフォーマンス向上が最小限という欠点があります。書き込み速度は非 RAID システムと同等ですが、読み取り速度はほとんどの状況で約 2 倍速くなります。読み取り操作ではドライブが並行してアクセスしてスループットを向上できるためです。RAID 1 は 2 ドライブセットに限定されます。
RAID 5: シングルパリティ付きストライピング。この RAID タイプでは、データはアレイ内のすべてのドライブにわたって複雑なストライプで書き込まれ、すべてのドライブにわたって分散した分散パリティブロックが存在します。これにより RAID 5 は 3 つ以上のディスクの任意のサイズのアレイを使用でき、パリティは分散していてどの 1 つの物理ディスクにのみ存在するわけではないにもかかわらず、パリティのために 1 つのディスクに相当するストレージ容量しか失いません。RAID 5 は大型アレイでのストレージ容量損失が少ないためコスト効率が良く、よく使用されます。ミラーリングとは異なり、パリティ付きストライピングではディスク全体の各書き込みストライプに対して計算が必要で、これによりオーバーヘッドが生じます。したがってスループットは常に明白な計算にはならず、パリティ計算を行うシステムの計算能力に大きく依存します。RAID 5 の容量計算は非常に簡単で、単に((n-1)*s)です。RAID 5 アレイはアレイ内の任意の 1 つのディスクの損失を乗り越えることができます。
RAID 6: ダブルパリティ付き冗長ストライピング。RAID 6 は RAID 5 と実質的に同一ですが、ディスク障害に対する追加保護のために、ストライプごとに 1 つではなく 2 つのパリティブロックを使用します。RAID 6 は他のレベルが標準化されてから数年後に追加された、比較的新しい RAID ファミリーのメンバーです。RAID 6 は特別で、データ損失なしにアレイ内の任意の 2 つのドライブの障害を許容できます。しかし、追加の冗長性レベルに対応するため、RAID 6 アレイはアレイ内の 2 つのドライブに相当するストレージ容量を失い、最低 4 つのドライブが必要です。RAID 6 アレイの容量は((n-2)*s)で計算できます。
RAID 10: ミラーリングとストライピングの組み合わせ。技術的に RAID 10 は、非パリティストライプ(RAID 0)に存在する RAID 1 ミラーのセットを包含するハイブリッド RAID タイプです。多くのベンダーは RAID 10(または RAID 1+0)という用語をアレイ内の 2 つのドライブのみを指す際に使用しますが、技術的にはストライピングはアレイに最低 4 つのドライブがなければ発生できないため、それは RAID 1 です。RAID 10 ではドライブはペアで追加する必要があるため、アレイ内に存在できるのは偶数のドライブのみです。RAID 10 は総ドライブセットの最大半分の損失に耐えることができますが、各ペアから最大 1 つまでです。RAID 10 はパリティ計算を伴わないため、RAID 5 または RAID 6 と比較してパフォーマンス上の優位性があり、アレイを動かすために必要な計算能力も少なくなります。RAID 10 は一般的な RAID タイプの中で最高の読み取りパフォーマンスを提供します。アレイ内のすべてのドライブを読み取り操作で同時に使用できるためです。ただし書き込みパフォーマンスははるかに低くなります。RAID 10 の容量計算は RAID 1 と同一で、(n*s/2)です。
今日のエンタープライズでは、ソフトウェアまたはハードウェア RAID のどちらを実装していても、IT 部門がここで述べた 4 つ以外のドライブ構成を真剣に検討する必要がある場合はほとんどありません。従来、RAID アレイの決定における最大の懸念は使用可能な容量に基づいていました。ドライブが高価で小さかったためです。今日ではドライブが非常に大容量になったため、ストレージ容量はほとんど問題にならなくなり、少なくとも数年前のようではありません。コストも下がったため、より良いドライブ冗長性のために必要な追加ドライブを購入することは一般的に小さな懸念事項です。容量が制約になる場合、RAID 5 は他のアレイタイプと比較してストレージ容量の損失が最も少なく、大型アレイではストレージ損失が無視できるため、人気の選択肢です。
今日では一般的に他の懸念事項、主にデータの安全性とパフォーマンスがあります。データ保護を確保するために少し余分に費やすことは明白な選択のはずです。RAID 5 は単一のドライブしか失えないという欠点があります。わずか 3 つのメンバーのアレイでは、RAID 1 が提供する保護よりもほんのわずか危険なだけです。3 つのドライブのうちいずれか 1 つを失っても生き残ることができます。2 つのうちどちらかを失うことに比べてそれほど怖くありません。しかし、例えば 16 ドライブの大型アレイではどうでしょうか。16 台のうち 1 台しか安全に失えないことは、信頼性についてもっと徹底的に疑問を持つべきでしょう。
ここで RAID 6 がギャップを埋めるために登場しました。大型アレイで使用される RAID 6 は、非常に小さなストレージ容量とパフォーマンスの損失で、任意の 2 つのドライブを失えるという保証を提供します。パリティ付きストライピング陣営の支持者は、RAID 5/6 がストレージサブシステムで十分な「費用対効果」を提供できることを経営陣に説得するためにこれらの数値を引用することが多いですが、他にも考慮すべき要素があります。
RAID の信頼性に関する議論でほぼ完全に見過ごされている — そもそも議論されることが少なすぎるトピックですが — のは、パリティ計算の信頼性の問題です。RAID 1 または RAID 10 では、パリティ付きストライプを作成するための「計算」は行われません。データは単純に安定した方法で書き込まれます。ドライブが障害を起こすと、そのパートナーがロードを引き継ぎ、パートナーが交換されるまでドライブパフォーマンスが若干低下します。既存のドライブメンバーに影響を与えるリビルドプロセスはありません。パリティストライプでは異なります。
パリティを持つ RAID アレイには、ドライブ上に何があり何があるべきかを計算する操作があります。この計算は非常にシンプルですが、物事がうまくいかない機会を提供します。RAID 1 または RAID 10 で障害を起こしたアレイコントローラーは理論的にはドライブのコンテンツに悪いデータを書き込む可能性がありますが、コントローラーが独自にドライブの変更を行うプロセスがないため、ミラーを作成する場合以外に「リビルド」プロセスはないため、これが実際に発生することは非常にまれです。
パリティを持つアレイがリビルド操作を実行すると、アレイの全コンテンツをステップスルーし、交換されたドライブに欠けているデータを書き戻すという複雑なプロセスを実行します。それ自体は比較的シンプルで心配する必要はないはずです。私や他の人が実際に目撃したのは、アレイへの接続が緩いコネクタにより失われたディスクが関与する若干異なるシナリオです。ドライブは特に常時稼働システムで数年間の使用後、サーバーに置かれているうちに徐々に「緩んで」くることがよくあります。
極端なシナリオでは、アレイコントローラーが 1 つまたは複数のドライブが続けて障害を起こしてリビルドのためにオンラインに戻ってきたと判断した場合、ドライブ上の良いデータが悪いパリティデータで上書きされる可能性があります。この場合、ドライブ自体は障害を起こしておらず、データ損失はありません。理論的には単にドライブを再挿入するだけで対応できます。ホットスワップシステムでは、障害ドライブの取り外しと交換に基づいてドライブのリビルド管理が自動的に行われることが多いです。そのため、このドライブを失って交換するプロセスは人間の介入なしに発生する可能性があります — そしてリビルドプロセスが開始されます。このプロセス中にドライブシステムは危険にさらされており、同じイベントが再び発生すると、ドライブアレイはドライブのステータスに基づいて良いファイルシステムを上書きして不良データをドライブ全体にストライピングし始める可能性があります。障害ドライブが存在しないのに不要なリビルド操作によってシステムがアレイ全体を失ってしまった場合は、サーバー管理者にとって最も落胆する光景の一つです。
理論的にはこのような状況は発生すべきでなく、これを防ぐためのセーフガードが存在しますが、現在および以前のドライブのステータスとそのドライブ上のデータの品質に対する低レベルドライブコントローラーの判断は、見た目ほど単純ではなく、間違いが起きる可能性があります。このような状況は可能性としては低いですが実際に起こります。そしてこれは RAID 5 および RAID 6 システムに、プールから生き残れるドライブ損失数から計算される従来のリスクに加えて、ほぼ計算不可能なリスクを加えます。プールから生き残ることができるドライブ損失のリスクに加えて、パリティ障害のリスクも考慮する必要があります。ドライブがより信頼できるようになるにつれて、パリティ障害リスクイベントの重要性は増大します。
さらに、RAID 5 および RAID 6 のパリティはパリティ計算によるシステムオーバーヘッドをもたらします。これは専用の RAID ハードウェアによって処理されることが多いです。この計算はドライブサブシステムにレイテンシを導入し、ハードウェアとソフトウェアの両方の実装によって大きく異なるため、実装ごとに固有なため、RAID レベルのパフォーマンス数値を相互に比較して述べることは不可能です。
おそらく今日の RAID 選択における最大の問題は、ストレージ効率とドライブ損失耐久性のメトリクスが容易に取得できることが、信頼性とパフォーマンスの全体像を隠してしまうことです。これらの統計は、影響の可能性に関わらず、ほぼまったく利用できません。メトリクスの危険の一つは、人々が容易に測定できる要因に焦点を当て、容易に測定できない要因を無視するということです。
すべての現代的な RAID レベルには適切な用途がありますが、コンテキストの中で考慮し、リスクの全範囲を理解することが不可欠です。業界のデフォルトを RAID 5 から RAID 10 にシフトするよう努力すべきです。ドライブは安価であり、データ損失は高価です。
【編集注: この記事が最初に書かれてから数年が経ち、リビルド操作中の URE(Unrecoverable Read Error、回復不可能な読み取りエラー)リスクの台頭により、パリティアレイの主なリスクはここに挙げたものから URE 関連のリスクへとシフトしています。】
