RAIDを使って耐障害性を上げる
RAIDを使って耐障害性を上げる
自宅サーバーではサーバー用の高価なハードディスクよりも家庭用の安価なハードディスクが使われることが多いと思いますが、家庭用ハードディスクはサーバー用のそれと比べて耐久性が低く壊れやすいと言えます。そこで今回は家庭用ハードディスクを複数個積んでRAID(Redundant Arrays of Inexpensive Disks)構成を取ることで耐障害性を上げることを考えてみたいと思います。
RAIDとは、複数台のハードディスクを組み合わせることで仮想的な1台のストレージとみなして運用する技術のことです。RAIDを実現するにはRAIDボードと呼ばれる専用ハードウエアを使うハードウエアRAIDと、OSやソフトウエアの機能で実現するソフトウエアRAIDの2種類があります。
ハードウエアRAIDの場合、業務用で使われる高価なRAIDボードと家庭用で使われる安価なRAIDボードがありますが、自宅サーバーで高価な業務用RAIDボードを使う機会はあまりないと思われます。また家庭用RAIDボードの対応OSがWindowsやMacOS等家庭用OSに限定されていることが多いため、本連載のようにCentOS(Linux)を扱う場合は何かと不便が多いです。
そこで今回はmdadmで実現するソフトウエアRAIDを取りあげてみたいと思います。mdadmとは、Linux上でソフトウエアRAIDを実現するプログラムです。例えば2台のSATAのハードディスクが/dev/hdb?と/dev/hdc?として認識されていた場合、それらを1つに束ねて/dev/md?として利用できるようになります。
図1:RAIDの仕組み |
RAIDのレベル
RAIDには1~6のレベルがありますが、このうち通常使われるのはRAID1(ミラーリング)、RAID5、RAID6の3種類です(※注意:RAID0も比較的よく使われますが、RAID0は耐障害性を上げないのでここでは除外します)。
RAID1(ミラーリング)
RAID1は複数台のハードディスクに同じ内容のデータを書き込むことで冗長性を持たせる方式です。RAID1構成にするためにはハードディスクが最低2台必要です。RAID1は全記憶領域の半分がデータ冗長化のために使われるため、ハードディスク2本でRAID1を構成した場合実容量(実際に使える容量)は物理容量の半分になります。耐障害性は高いがコストがかかる構成と言えます。
RAID5(ブロック単位でのパリティ分散記録)
RAID5は実際のデータの他、パリティ(誤り訂正符号データ)を記録します。RAID5構成にするためにはハードディスクが最低3台必要です。RAID5ではハードディスクが1台故障してもパリティデータを利用することで元のデータを計算して取り出すことができますが、さらにハードディスクが2台以上故障するとパリティデータを利用しても元データを取り出すことができず全データが消失します。
RAID5は全記憶領域中ハードディスク1台分をパリティ用に使われるだけで済むため、RAID1と比較すると実容量を大きく確保できます。しかし、実際にはRAID5を利用してハードディスクがほぼ同時に2本以上故障する事故が比較的多かったため、後にRAID6が考案されました。耐障害性は劣るがコストが安い構成と言えます。
RAID6(ブロック単位での複数パリティ分散記録)
RAID6は複数個のパリティを記録します。RAID6構成にするためにはハードディスクが最低4台必要です。RAID5では記録されるパリティが1つでしたが、RAID6では複数(実際は2つの場合がほとんど)のパリティが記録されます。RAID6ではハードディスクが2台故障してもデータが保全されるので、RAID5と比べてデータが消失する事故が起こりにくくなりました。
RAID6では全物理容量中ハードディスク2台分がパリティに使われます。耐障害性がやや高く、コストはRAID6を構成するハードディスクの本数が多ければ比較的安い構成と言えます。ただしまだ歴史が浅いRAID方式のため、パリティ計算部分でのバグが本当にないのか著者個人的に心配ではあります。