7. RAIDとは

今回はハードディスクのお話です。
ハードディスクはコンピュータシステムの基幹部品としては唯一の精密機械可動部品であり、磨耗型の故障が最も発生しやすいものです。特にサーバにおいては「ハードディスクは壊れるもの」という前提で対策を講じておく必要があります。そこで登場するのがRAIDという技術です。

RAIDはRedundant Array of Independent Disksの略で、複数のディスクを用いて冗長性のあるディスクアレイシステムを実現する代表的な技術です。RAIDには0から5までのレベルがあり、それぞれ性能や冗長性に特徴があります。一般的に使われるのはRAID0,1,5の3種類です。RAID2,3,4は定義はされているものの特に性能面で他より劣るため、ほとんど使われません。その他にもRAID0+1, RAID1.5, RAID6, RAID10などの派生レベルやメーカ独自に呼ぶものがあります。

次の表はRAIDの代表的なものであるレベル0, 1, 5を比較したものです。

RAIDレベル 冗長化方法 ディスク容量
利用率
性能
なし 100%
(何台でも)
二重化 50%
(2台構成時)
パリティ 67%
(3台構成時)

RAID0はストライピングと呼ばれ、高速化のみを追求したものです。冗長性は全くありません。サーバとしてはシステムダウンにつながる部分には絶対に使ってはいけません。

RAID1はミラーリングと呼ばれ、2台以上のディスクに全く同じデータを記録することで冗長化するものです。記録できる容量はディスク何台の構成でも1台分となります。ディスク2台構成の場合、片方が故障しても稼動を続けることができます。RAID1は方式が単純なため、特別なハードウェアを必要とせず、低コストで組むことができます。ディスク容量利用率が悪いのが欠点ですが、ハードディスクの大容量化・低価格化が進んだ現在では特に目だった欠点では無くなりつつあります。

RAID5はデータとデータのエラー訂正用のパリティを複数のディスク(通常3台以上)に分散して記録します。ディスクアレイ中の1台が故障しても、残りのディスクで稼動を続けることができます。ディスク台数N台の場合のデータ記録容量は、(N-1)台分となります。RAID5のメリットはその冗長性やディスク利用率もさることながら、故障したディスクをシステム稼動中に交換できるようにすることが容易であるということです。ホットスワップと言いますが、普通はSCSIやファイバチャネルなどのように、ディスクの付け外しをサポートするインターフェースを用いたシステムでのみ可能であり、IDEを使ったRAID5ではできません。またRAID5はデータの分散/合成やパリティ生成などの比較的複雑な処理を伴うため、専用のハードウェアを使ったものでないと性能を確保できません。

さて、以上の方式の中でSOHO向けサーバに適しているのはどれでしょう? RAID0は論外として、RAID1とRAID5を比べると、そのシンプルさからRAID1に軍配があがります。特に安価なIDEディスクを使ったRAID1のシステムは、低コストで安心を買うことができるという点でSOHO向けサーバに最適なものであると言えます。

8. ソフトウェアRAIDとハードウェアRAID

ここから先はIDEハードディスクを使ったRAID1についてお話をします。

Linuxで利用できるRAIDにはOSのmdドライバ(Multiple Devicesドライバ)によるソフトウェアRAIDと、RAIDコントローラチップやカードを使ったハードウェアRAIDがあります。前者は特別なハードウェアを必要とせず、LinuxカーネルがIDEインターフェースを認識するだけで利用できます。これに対して後者は専用ハードウェアに対するドライバが必要になります。ドライバはLinuxカーネルで標準的にサポートされるものとそうでないものがあります。サポートされないものについてはハードウェアベンダのWebサイトからドライバを入手するなりしてカーネルに組み込む必要があります。
ですから、ハードウェアRAIDを利用する場合は、Linuxでのサポート状況を事前によく調べておく必要があります。

次の表はソフトウェアRAIDとハードウェアRAIDの特徴を比較したものです。

比較項目 ソフトウェアRAID ハードウェアRAID
コスト
性能 中? 高?
専用ドライバ 不要 必要
RAID構築単位 パーティション ディスクドライブ
RAID操作(構築・同期など) Linuxコマンド BIOSユーティリティ

ハードウェアRAIDは専用ドライバが必要だったり、RAIDの操作がBIOSレベルだったりと使いにくいですが、専用ハードウェアを使うわけですから高い性能を発揮できることが期待できます。

というわけで実際の性能を測定してみます。

測定に用いたサーバの概略仕様を次の表にまとめます。

項目 仕様
OS Redhat Linux 9 Kernel 2.4.20-8
CPU Celeron 2.2GHz
チップセット Intel 845G
メモリ PC2100 DDR 512MB
HDD Seagate ST380011A 80GB×2台
ハードウェアRAID Promise MBFastTrak133 Lite
(チップ PDC20276)
ドライバはPromiseのホームページ
から入手したバージョン 1.03.0.1

ハードウェアRAIDとしては、Promise社製PDC20276コントローラチップがマザーボード上に組み込まれたMBFastTrak133 LiteというIDE RAIDを用いました。拡張IDEインターフェースにハードディスクを接続してRAID1を構成するものです。これに対し、ソフトウェアRAIDは標準IDEインターフェースに接続されたハードディスクを用い、LinuxのmdドライバでRAID1を構成しました。またリファレンスとして標準IDEインターフェースに単体のハードディスクを接続したシングルディスクでの性能も測定します。

では、次に結果を示します。

RAID1ベンチマーク結果


測定方法 (いずれもバッファキャッシュをフラッシュした後に測定)

・ランダムRead/Write
カーネルソースツリーのtarコマンドによるコピー(17,482ファイル+ディレクトリ,220MB)
・ランダムRead
同上の読込み(tarコマンドで/dev/nullへリダイレクト)
・シーケンシャルRead/Write
サイズ1GBの単一ファイルのcpコマンドによるコピー
・シーケンシャルRead
サイズ1GBの単一ファイルの読込み(catコマンドで/dev/nullへリダイレクト)

結果を見ると、RAID1は書き込みを伴う処理に関するオーバヘッドがあり、Read/Write性能でシングルディスクに対して15〜30%程度劣ることがわかります。1万本以上ものファイルの読書きを行うランダムRead/Writeテストでは、この傾向はソフトウェアRAIDに顕著に表れています。

逆にRead性能はランダムの場合は顕著な差は無く、シーケンシャルReadではRAID1がシングルディスクの性能を上回る結果となっています。特にソフトウェアRAIDのシーケンシャルReadは、シングルディスクより20%高速との結果が出ています。

いずれにしてもこの測定結果から言えることは、RAID1にしたことによる顕著な性能劣化は無く、更にソフトウェアRAIDとハードウェアRAIDの差もほとんどないということです。ただRAID1にしたことでランダムRead/Write性能が最大30%下がる点については、更新の頻繁なデータベースシステムのデータ領域などを想定した場合に注意しなければならない点であるといえます。

逆にWebサーバやファイルサーバなどのようにファイルの読込みが多い場合は、RAID1によるシーケンシャルReadの性能向上がパフォーマンス向上に寄与することが期待できます。

9. ソフトウェアRAIDとハードウェアRAIDのどちらを選ぶべきか

性能がほとんど変わらないソフトウェアRAIDとハードウェアRAIDですが、どちらを選ぶべきでしょうか? この決め手となるのは運用と可用性(Availability)です。では運用面に着目してソフトウェアRAIDとハードウェアRAIDの比較を行ってみます。

比較項目 ソフトウェアRAID ハードウェアRAID
インストール難易度
専用ドライバ組込み要
カーネルバージョンアップ
への影響
なし 影響有り
専用ドライバは特定の
カーネルバージョンに依存
RAID管理 OSレベル BIOSレベル
障害回復時のサーバの
ダウンタイム

BIOSでの同期化が必要

ソフトウェアRAIDとハードウェアRAIDの決定的な違いは「障害回復時のサーバのダウンタイム」です。2台のハードディスクでRAID1を構成したサーバにおいて、1台のディスクに障害が発生しても残りの1台による縮退運転の状態でサーバは稼動を続けることができますが、できる限り早く元のRAID1の状態に回復させなければなりません。

次の図は、障害発生から回復までの手順およびサーバの稼動状態を、ソフトウェアRAIDとハードウェアRAIDで比較したものです。

RAID障害回復比較

いずれの場合もHDD1に障害が発生した時点でRAIDアレイは自動的にHDD2のみによる縮退運転モードに入ります。この状態でもサーバのパフォーマンスには何ら支障はありませんが、HDD2が壊れるとサーバが止まるだけでなく、貴重なデータをも失うことになります。

このためできるだけ迅速に代わりのHDDを用意し、サーバを停止して交換作業に入ります。

交換作業が終わると、ソフトウェアRAID1ではすぐに縮退モードのRAIDでサーバを立ち上げ、同期化を始めることができます。HDD2の内容をHDD1にコピーし、同一化することを「同期化(Synchronize)」といいます。
これに対し、ハードウェアRAID1ではHDD交換後の同期化はBIOSユーティリティで行うため、これが完了するまでサーバを立ち上げることはできません。

同期化はディスク容量にもよりますが、数十分から数時間かかります。ハードウェアRAID1ではこの間サーバを稼動させることはできません。

ソフトウェアRAID1でのHDDの同期化はOSのコマンドでパーティションごとに行います。大量のデータをコピーすることになるため、サーバのパフォーマンスへの影響が気になりますが、Linuxのmdドライバでは同期化のためのデータ転送速度を一定の値(10MB/秒など)に制限し、システムへの影響を少なくしています。

実際に障害を起こし、mdドライバによる同期化が行われている状態でWebサーバにアクセスしても、そのような処理が行われていることには気付きません。同期化に要する時間は70GBのパーティションで約2時間でした。

以上のようにLinuxでは、ソフトウェアRAIDを採用することでシステム障害からの回復時間を最小限できるように作られています。当社のLinuxサーバCシリーズもこのソフトウェアRAID1を採用しています。

なおRAIDにおいて最も重要なのは運用体制だと考えます。いくら高級なRAIDシステムを使っていても、異常に気付かなかったり、その回復方法が明確になっていなかったりすれば意味がありません。実際RAID1で稼動していたシステムが縮退運転モードになったにもかかわらず、回復方法を知らないために数ヶ月そのままにしておき、結局もう1台のディスクが壊れてシステムを長期間ダウンさせてしまったという笑えない例を見たことがあります。

RAIDの回復方法の手順は必ず文書化し、システムが本稼動に入る前に自分の手で回復作業を実施してみてください。またスペアディスクを用意しておくことも忘れないでください。

ちなみに当社LinuxサーバCシリーズには、あらゆる状況を想定したRAIDの回復マニュアルが同梱されます。RAIDの管理に用いるユーティリティはDebianパッケージに含まれるmdadmというものです。これはRAIDの運用に関わるすべての操作を一つのユーティリティで行うことができるばかりか、RAIDの状態をモニタし、異常が発生すると自動的に指定したアドレスにメールを送るなどの機能も備えており、とても便利でおすすめです。

mdadmの英語版manページを当社で日本語に訳したものがあります。
右のリンクがそれです。 mdadm(8) >>
この翻訳文書に限って再配布は自由です。どうぞご利用ください。

さて、最後に今回のまとめです。

  1. RAIDにはレベル0から5までがあるが、SOHO向けサーバに適しているのはコストと性能の点でRAID1(ミラーリング)である。
  2. 単体のディスクに比べてRAID1はRead/Write性能が10〜30%落ちるが、シーケンシャルReadの性能は20%程度上がる。
  3. ソフトウェアRAID1とハードウェアRAID1とでは性能の優劣はほとんどない。
  4. LinuxのソフトウェアRAIDは障害回復時のダウンタイムを最小限にすることができ、サーバのディスクシステムの冗長化に最適である。

いかがでしたでしょうか? ご意見やご要望・ご質問は当社の掲示板でお願いします。
さて、次回はUPSのお話です。ご期待ください。

(石)