RAID 10は、冗長性を確保するミラーリングと、速度を高めるストライピングという2つのRAIDレベルを組み合わせる。多くの実装ではRAID 1+0として構築される。つまり、まずミラーのペアを作り、それらをストライプ化する。
パリティ計算のオーバーヘッドなしに高い読み書き性能を発揮し、再構築もパリティの再計算ではなく、比較的単純なミラーコピーで済む。一方、使用可能容量は約50%にとどまり、最低でも4台のドライブが必要だ。
ここでの耐障害性は絶対的なものではなく、条件付きだ。RAID 10は、ミラーの各ペアにつき1台のディスク障害に耐えられる。ただし同じペアの2台がともに失われると、アレイの残りがオンラインのままでも、そのデータは失われる。この違いは、注記にとどめず、購入や利用の判断に反映すべきだ。
重要用語の定義
RAID 1+0(ストライプ化したミラー): RAID 1のミラーアレイをまず構築し、それらをRAID 0のストライプにまとめる。ほぼすべての人が「RAID 10」と呼ぶものがこれであり、ほとんどのハードウェアコントローラーが実装している。
RAID 0+1(ミラー化したストライプ): 逆の構成だ。まずRAID 0のストライプアレイを構築し、それ全体をミラーリングする。同じコンポーネントを使うが、組み立てる順序が異なるため、障害発生時の挙動は大きく異なる。
ミラーペア: 同一のデータを保持する2台のディスク。RAID 1+0では、こうしたペアを集め、スループット向上のためにストライプ化する。
複雑型RAID 10: 単一の非ネスト型RAIDレベル(Linux mdadm --level=10)で、内部に別々のRAID 1層とRAID 0層を文字どおり構築することなく、RAID 10の動作を再現する。
RAID 1+0対RAID 0+1:構築順序が重要な理由
RAID 1+0はまずRAID 1のミラーを構築し、それらをRAID 0層にまとめてストライプ化する。各ミラーは独立して管理されるため、障害が発生したディスクが別々のミラーに属している限り、複数のディスク障害に耐えられる。
RAID 0+1はこの順序を逆にし、まずストライプ化してから、ストライプセット全体をミラーリングする。SUSEのドキュメントによれば、この構成は耐障害性がやや低い。なぜなら、ミラーの両側で同時にディスク障害が発生すると、アレイ全体のデータが失われるからだ。さらに構造上の制約もある。基盤となるRAID 0の各レッグにはスペアデバイスを割り当てられない。RAID 0のストライプは、1台のデバイスを失うだけでも耐えられないためだ。
コントローラーの障害時の挙動を想定する前に、実際にどのトポロジーを構築するのかを確認しよう。「RAID 10」と記載されたデータシートだけでは、内部がRAID 1+0だとは限らない。
RAID 10対RAID 6対RAID 1:選択表
| RAID 10 | RAID 6 | RAID 1 | |
|---|---|---|---|
| 使用可能容量 | 約50%(N ÷ レプリカ数) | N-2台 | 50%、ストライピングなし |
| 許容される障害 | ミラーペアごとに1台 | アレイ全体で任意の2台 | 2台のディスクのうち1台 |
| 再構築方式 | ミラーコピー | パリティの再計算 | ミラーコピー |
| 最適なワークロード | OLTP、仮想化 | 大容量・アーカイブ | 小規模でシンプルな冗長化 |
容量差は具体的な数字に表れる。16TBのドライブ8台では、RAID 10の使用可能容量が64TBであるのに対し、RAID 6では96TBになる。しかも、ドライブ台数が増えるほど、その差は広がる。
書き込み経路の違いは、アーキテクチャ上のものであり、速度が必ず何倍になるという話ではない。RAID 10はパリティ計算なしで各ブロックをミラーの両側に書き込むのに対し、RAID 6はストライプごとに2つのパリティブロックを計算して書き込む。簡略化したServnet UKのモデルでは、RAID 10の書き込みペナルティをおよそ2倍、RAID 6を6倍としている。ただし実際の結果は、コントローラーキャッシュ、ストライプサイズ、ワークロードのブロックサイズによって変わる。これは方向性を示すモデルであり、そのまま引用できるベンチマークではないと考えるべきだ。
判断の原則はこうだ。小ブロックのランダム書き込みが継続し、レイテンシーに敏感なトランザクション処理では、最大容量よりも再構築の速さと予測可能なI/Oが重要になるため、RAID 10の容量コストを支払う価値がある。一方、容量効率や非常に多いドライブ数が要件の中心なら、RAID 6、イレージャーコーディング、またはレプリケーション型ストレージシステムを選ぶべきだ。
ドライブ障害時に実際に起きること
RAID 10の再構築では、生き残ったミラーパートナーから交換用ディスクへデータをコピーする。アレイ全体でパリティを再計算するわけではない。そのため、DiskInternalsとServnet UKはいずれも、RAID 10の再構築は一般にパリティRAIDの再構築よりアレイへの負荷が小さいと説明している。実際の所要時間はドライブの速度、データ量、コントローラーによるスロットリングに左右されるため、ベンダーが示す「数分から数時間」という見積もりを、自分のアレイに固定的に当てはまる数字だと考えてはいけない。
明確な限界は、同じミラーペア内で2台の障害が発生すると、生き残るコピーがなくなり、アレイの残りが正常でもそのペアのデータが失われることだ。これは、RAID 10の冗長化モデルでは吸収できない唯一のシナリオである。
独立した障害と相関した障害は異なり、RAID 10の計算がカバーするのは前者だけだ。「ペアごとに1台」という耐性は、障害が独立して発生することを前提としている。しかし、同じバックプレーン、電源、コントローラー、またはファームウェアのロットを共有するドライブは、同時に故障する可能性がある。DiskInternalsは、そのリスクを減らすため、ミラーペアを別々のバックプレーンやエンクロージャーに意図的に分散することを推奨している。RAID 10がこれを自動的に行うわけではなく、自分で決める設計事項だ。
容量コストを払う価値がある場合、ない場合
RAID 10の50%という容量コストが正当化される環境は限られる。OLTPやトランザクションデータベース(SQL Server、Oracleクラスのワークロード)、高密度の仮想化ホストなど、小ブロックのランダム書き込みと高速な再構築が、生のテラバイト容量の最大化より重要な環境だ。実際には、次のような混在環境で採用される。データベースとVMにはフラッシュ上のRAID 10を使い、大容量データとバックアップにはニアラインHDD上のRAID 6を併用することで、それぞれのRAIDレベルが得意な仕事を担える。
大容量またはアーカイブストレージ、大容量のシーケンシャル層、あるいは非常に大規模なオールフラッシュ構成では、このコストは割に合わない。耐障害性を得るためだけに生のドライブを2倍購入することになり、高額になるためだ。その規模では、RAID 6、イレージャーコード方式のオブジェクトストレージ、ソフトウェア定義のレプリケーションのほうが、通常は使用可能な1TB当たりのコストを抑えつつ、同程度の耐障害性を実現できる。
パリティRAIDにはない調整項目が1つある。複雑型ソフトウェアRAID 10では、データブロックあたり2つを超えるレプリカを、アレイ内のデバイス数まで使用できる。これにより、さらなる冗長性と引き換えに容量をいっそう消費する。ミラーペア全体の喪失さえ許容できない場合に役立つニッチな選択肢だが、ほとんどの環境で必要となる標準設定ではない。
ルールを変える実装上の詳細
LinuxのソフトウェアRAIDには、実際には1つではなく3つの選択肢がある。ネスト型のRAID 1+0またはRAID 0+1のデバイススタックを手動で構築することも、mdadm --level=10またはYaSTから単一の「複雑型」RAID 10レベルを使うこともできるが、これはまったくネスト型ではない。複雑型ではデバイス数が偶数でも奇数でもよく(ネスト型1+0は偶数が必要)、2個からN個までのレプリカを設定できる。また、near、far、offsetというデータレイアウトを選択でき、それぞれ性能特性が異なる。これらの特性はネスト型には適用されない。
LVM RAID 10はlvcreateで作成し、lvconvert --repairで修復する。ただし、OracleのLinux LVMドキュメントによれば、この修復コマンドを使うには、ボリュームグループにスペアの物理ボリュームがあらかじめ接続されていなければならない。その準備を飛ばすと、実際に障害が起きたとき、故障したレッグの再構築先がなくなる。
ハードウェアコントローラーには、RAID 10に普遍的なものではない独自のルールもある。たとえばBroadcomのMegaRAIDファミリーは、4~240台のドライブにまたがるスパンドRAID 10をサポートする。スパンは一致した偶数台でなければならず、2~32台では単一スパンのRAID 1が必要で、36台以上ではマルチスパン構成に移行する。これらはMegaRAIDおよびファームウェアの挙動であり、別ベンダーのコントローラーにも適用されるとは限らない。ドライブ台数の上限を前提に構成を計画する前に、必ず対象ハードウェアのドキュメントを確認しよう。
よくある質問
RAID 10はバックアップの代わりになるか?
いいえ。RAIDが保護できるのは、ディスクのハードウェア障害だけだ。ランサムウェア、誤削除、論理破損、サイト災害には何の効果もないため、変更不能なオフサイトバックアップは、RAIDレベルにかかわらず必須だ。
RAID 10のミラーペア内で、サイズや種類の異なるドライブを混在させられるか?
ここで確認したベンダー文書には明確なルールの記載はないが、サイズの異なるドライブを組み合わせると、ペアの容量が小さいほうのドライブのサイズに制限されるため、容量が無駄になり、レイテンシーにばらつきが出る可能性もある。実用上の安全策としては、ペア内のドライブをそろえるのが基本だ。
RAID 10はエンクロージャー全体、コントローラー、電源の障害から保護できるか?
標準設定ではできない。「ペアごとに1障害」という計算は、ドライブ障害が独立して発生することを前提としている。同じバックプレーン、コントローラー、ファームウェアのバグ、または電源イベントによる相関障害では、ペアの両方が同時に失われる可能性がある。ミラーペアを別々のバックプレーンやエンクロージャーに分散することは、設計に組み込む対策であり、RAID 10が自動的に行うものではない。
RAID 10アレイは実際に何台のドライブをサポートできるのか?
実装に完全に依存する。ネスト型のLinuxソフトウェアRAID 1+0ではデバイス数が偶数である必要があるが、複雑型mdadm RAID 10では偶数でも奇数でもよく、ハードウェアコントローラーの各ファミリーには、独自のスパン数とドライブ台数の上限がある。実装をまたいで共通する単一の最大値は存在しない。
SSDベースのRAID 10は、HDDより追加コストを払う価値があるか?
ベンダー資料では、フラッシュで低レイテンシー、高IOPS、高速な再構築を実現すると報告されているが、これは独立したベンチマークではなく、ベンダーによる比較だ。価格と性能は容量、構成、サポートティアによって異なるため、予算を確定する前に、自分のワークロードとコントローラーで検証しよう。