RAID

まったくハード面の知識がないので
最近RAIDについて調べたりしているんだけど、
HDDをトイレットペーパーに喩えるとわかりやすいと思った。

たとえばロールが2個あったとする。使用中のものとスペアのもの。
そうすると1個なくなった時点で「あ、新しいの持ってこなきゃな」と思う。
そこで持ってこないと大変なことになる。

別に実際にそういうケースに出くわしたって訳ではないんだけど、
本当そういう訳ではないんだけど大変なことになる。
だからそのために2本なくなっても大丈夫なのがRAID5とかRAID6。
1本なくなっても大丈夫なのはRAID1がある。
RAID2〜4についてはまだ調べてないけど
実用化が難しかったりあんまり使われてないっぽい。
RAID0は普通に1台で使うより障害に対する耐性は低い(後述)。


ただやっぱトイレットペーパーと違う点はHDDは寿命が短い点。
寿命が短いので企業によってはHDDが壊れていなくても
定期的に交換したりするところもあるそうだ。


RAID5はよく危ないと言われる。
3個以上使うんだし全然問題ないじゃんとか思うかもしれない。
しかしRAID5は2次障害に弱いらしい。
つまり1個壊れた時点でもう1個壊れたらアウトですよと。

そして実際そういうことはよく起こりえるわけで、
HDDをまとめて買った場合同じロット番号だったりすると
同じタイミングで御陀仏になってしまったりすることがままある。

RAID5は、システムのうち2台のHDDが壊れたら全てが死亡するシステムです。
つまり、1台壊れた段階で残り一台のHDDが壊れたら全部が死亡します。

冒頭に書いた10台のNASだったら、1台のHDDが壊れたときのシステムの死亡確率はHDDが2台のマシンと比べて9倍になります。
再構築中に二台目のHDDが壊れることは多いというのは、今回のgoogleの話だけではなく、以前からRAID6の優位性を語る記事などでも触れられていました。

同ロットのHDDで、同じように稼働していたHDDであれば同時期に壊れる可能性は高いですよね。ホットスペアがあっても再構築は時間がかかります。高負荷で稼働中のシステムであればあるほどリスキーです。

F's Garage @fshin2000 :RAID5は全然信用できない。

このような問題を抱えているので実際にはホットスペア、
つまり同じデータを違うサーバに持たせておいて、
障害が起きた時点でそっちに切り替える*1などの手段が必要になってくる。

ただまぁ自分でも「そんなんする位なら1台でもっと安全な手段を取るよ」とか思うわけで
最近はあまりRAID5は使われていない?らしい。
でもなんだかんだ言って使われてる?よくわからない。


で、実際使われているのはRAID1, RAID10, RAID01, RAID5, RAID6とかそのあたりらしい。
「でもRAID1って2台壊れたらアウトなんじゃ?RAID5よりもずっと危ないんじゃ?」
と自分は思うのだけど、推測するに構造の単純さのために復旧時に楽なのかなと。

と思っていたらwikipediaのRAID5の項目でこんなの見つけた。(強調は自分がした)

  • 読み出しは高速であるが書き込みは低速である(特にドライブ台数が少ない場合)。高価格帯製品では大容量のキャッシュを搭載することで吸収している。
  • パリティ演算が必要なため、ソフトウェアRAIDに不向き。
  • 停電やディスククラッシュにより部分的に書き込みが行われた状態での停止が発生した場合に検出困難な不整合が発生するタイミングがあり、RAID 5書き込みホールと呼ばれる。ハードウェアRAIDではバッテリを搭載するなどして電源異常時の問題を回避するように構成されている場合が多いが、ソフトウェアRAIDでは一般に対応は困難である。RAID-Zはソフトウェアによるこの問題の解法の一つ(同様の問題はパリティを用いるRAID 4、RAID 6等でも存在する)。
  • 障害発生時の復元作業が遅い。
  • ドライブ1台故障時にパリティからデータを再生するため、性能が低下する。
  • 2つ以上のドライブが同時に故障すると回復できない。
  • ドライブ1台故障時はRAID 0並みの信頼性が低い状態となる。特に構成台数が多い場合、復元作業中にもう1台が故障し、回復不可能となってしまうケースがある(これに対する解がRAID 6)。

最後のRAID0並みの信頼性って怖いな。


RAID1の構造はシンプルで2台に同じデータを書き込むだけ。これをミラーリングという。
RAID0ってのもあるのだけど、普通に1台で使うより障害への耐性はない。目的としては「複数台のハードディスクに、データを分散して読み書きし高速化する」こと(by wikipedia)。これをストライピングという。

RAID10は「じゅう」ではなくて「いちぜろ」でRAID1 + RAID0の操作を組み合わせたもの。
RAID01についても同様だけど、両者はRAID0とRAID1の操作を行う順番が違う。
以下wikipedia参照。

RAID 0RAID 1を組み合わせた構成を特別にRAID 1+0(RAID 10)/RAID 0+1(RAID 01)と呼ぶ。高速化、大容量化を目指したRAID 0と高信頼性を求めたRAID 1を組み合わせることにより、速度、容量、耐障害性の向上を図ることができる。最低4ドライブ必要である。
RAID 0RAID 1は相性がよく、 RAID 1の特性によりRAID 0の弱点であったランダムアクセスも高速化できる。RAID 1を使用しているためコントローラの2重化にも対応できるので、容量が必要でなおかつ強力な耐障害性を求める場合に採用されることが多い。


RAID 0RAID 1、どちらを先に行うかにより名前が変わる。一見どちらも同じように見えるが耐障害性の面で異なる。

  • RAID 1+0:ミラーセットをストライプ
  • RAID 0+1:ストライプされた領域をミラー
RAID - Wikipedia

ミラーリングしてストライピングするか、ストライピングしたミラーリングするかの違い。


ここで言ったものの他にも

などの違いによって相性がある。
たとえばRAID5はソフトウェアRAIDとは相性が悪い(by wikipedia)、など。


間違ってたらツッコミお願いします。

*1:cf. コールドスタンバイ、ホットスタンバイ