【AWS】EBSでRAID1+0をやってみたメモ ~前編:そもそもRAIDって何?~
ども、昔合格したはずのLPIC201について再度学習中ですが、5年以上前に学んだこととか全然覚えてませんね。
というわけで、LPIC201の試験範囲であるLinuxのRAIDについて学んでいきます。前はたしかVMwareにCentOSとか入れてガチャガチャ弄った記憶がありますのが、今回はAWS使って学びますよ。
そもそもRAIDって何?についておさらい
まぁ、なんというか「ディスク管理の基礎」的な扱いのRAIDについてですが、改めて自分の言葉で書いたりすると理解が深まったり、間違ってたら指摘頂けるかもしれない感じもするので、おさらいも兼ねて書いてみます。このブログの趣旨でもありますしね。
ちゃんとした情報が知りたい人はQiita先生やGoogle先生にでも聞きましょう。
RAIDの目的
RAIDの目的は大きく分けて「ディスクへのアクセス高速化」と「ディスク障害の耐性強化」の2つあります。んで、そのどちらか、又は両方のパフォーマンスを上げるために色々な方法が考えられていて、方法ごとに0から始まる番号が振られています。
尚、「0」が「ディスクへのアクセス高速化」の為の方法で、「1」以降の番号は「ハード障害の耐性強化」の方法になります。「0」だけ特殊。
ちなみに今、RAIDの番号って「0」から始まって…何まであるんですかね。少なくとも2017/11/22現在のWikipediaだと「6」についてまで記載がありました。Google先生に「RAID7」とか聞いてみても30万件以上Hitします。僕のお仕事上触ったことあるのは「0」,「1」,「5」だけで、「6」も割と使われているらしい。
RAID0(ストライピング)
では、具体的なRAIDについてざっくり書いていきます。RAID0だけ他の番号と違って「ディスクへのアクセス高速化」のみの役割を担っています。
高速化についてそもそもの話で「ディスクめちゃくちゃ遅い」問題があります。SSDとかディスクの高速化が目覚しい昨今でありながら、Qiita先生によると2016年時点でディスクはメモリより1000倍は遅いらしい。
1000倍って言われるとよくわからないので単純な距離に例えると、ディスクが東京から名古屋まで行ってる間に、メモリは月面に到着しています。余計わかりません。とにかく、ディスクめっちゃ遅い。
なので、メモリが高速で書き込もうとしても、ディスクが遅すぎるせいで待ちになっちゃうんですね。その問題を解決…というかマシにする為に生まれたのがRAID0です。
その方法というのが、「ディスクを増やしてアクセスを分散させる」です。遅いのなら数を増やして仕事を分割させればいいじゃない…ということですね。感覚的にもイメージしやすいかと思います。
メリット
というわけで、メモリが早すぎるおかげでディスクを増やせば増やすほどアクセスが早くなります。後、こちらは副次的な効果だと思うんですが、上図でいうと3本のディスクを1本のディスクとして扱えるため、容量の少ないディスクしかなくてもRAID0で合わせれば、大容量のディスクを作れます。
デメリット
当然デメリットもあって一言で言うと「壊れやすくなる」です。複数のディスクを一つのディスクとして見なすRAID0ですが、そのディスクの内どれか一つでも壊れると使用不可になります。
なので、早くなるメリットは大きいんですが、なかなかRAID0単体で使うことはないんじゃないかなぁと思います。
RAID1(ミーラーリング)
続いてRAID1のミラーリングについて書いていきます。こちらはRAID0とは違って、「ディスク障害の耐性強化」が目的になります。
そもそもの話で「ディスクはいつか絶対に壊れる」問題があります。まぁ、ディスクだけに限らずハード全般に言える話ですが…。なので、いつかディスクが壊れてもシステムに影響出ないようになんとかしよう…というのがRAID1以降(0以外)の考えとなります。
んで、RAID1はミラーリングって言うくらいなので、ディスクに書き込む際、同じ情報2つ以上のディスクに書き込むことで、ミラーディスクを作成します。
メリット
RAID1で構成するディスクは2本以上で可能なので、RAID0とは逆に「ディスクを増やせば増やすほどディスク障害の耐性が増す」になります。3本で構成すれば2本まで壊れてもシステムに影響はでませんね。
デメリット
デメリットですがミラーを作るわけなので、「いくらディスクを増やしても1台分の容量しか使えない」です。100GBのディスクを3本用意したとして、RAID0なら300GB使えますが、RAID1だと1台分の100GBしか使えません。
また、複数のディスクに書き込みに行くわけなので、その分のリソースが余計にかかり、アクセス速度が低下します。(少なくとも早くはなりません)
RAID1+0について
ようやく今回やりたいRAID1+0についてですが、端的に言うとRAID0と1をかけ合わせて、「ディスクへのアクセス高速化」と「ディスク障害の耐性強化」の両方を実現したいというのが今回の目的です。実際の手順は後編で…。
雑なイメージですいません。以下の記事が分かりやすかったです。
https://note.cman.jp/server/raid/raid01/
後、細かいですが、RAID0+1とRAID1+0とでは、「ストライピングのグループをミラーする」のか「ミラーのグループをストライピングする」のかとで意味が異なるみたいです。同人誌の掛け算(カップリング表示)みたいですね。
その他のRAIDについて
書き始めの頃はRAID5についても書こうかと思っていたのですが、長くなったのと疲れたのと(おい)、AWSではRAID5,6は非推奨みたいなのでここでの記述は割愛します。
Linux での RAID 構成 - Amazon Elastic Compute Cloud
そもそも、AWSのハードウェアは内部で障害に強い造りになっているので、RAIDは書き込みを高速化させるために「0」が選ばれることが多いとのこと。「Amazon Web Services 実践入門」に書いてました。
SSDの障害について
余談ですが、SSDはフラッシュメモリを使用しているため、中で円盤が回っているHDDより壊れにくい印象がありますがググってみると結構壊れた事例が出てきますね。
Intel製SSDのX25-M(80GB)が壊れた、その前兆と修理までの軌跡 - consbiol のエコ日記
壊れ方(予兆)もHDDとは少し異なるよう。仕事ではHDDのサーバしか扱ったことがないので、SSDが主流になってきたら切り分けに難儀しそうだなぁと思いました。後、RAIDコントローラーは上手いこと自動対応してくれるんだろうか…。こちらは今後の課題とします。