2009年11月9日月曜日

新しいストレージを構築してみた(ソフト編)

このエントリーをはてなブックマークに追加
前回構築したストレージでは、ホストから12個のハードディスクがそのまま見えます。これを9D+2P+1Sの構成でRAID-Z2にしました。ZFSのRAIDには1つ注意しなければならない点があります。それはRAIDを構成するディスクの数を増やしても、IOPSが増えないことです。

ZFSのRAIDはブロックを書くときに、ブロックサイズに合わせてストライプサイズを変えて、すべてのディスクに書きます。ブロックを読むときはパリティを除くすべてのディスクから読みます。ブロックサイズが小さすぎて、ストライプサイズが512バイトよりも小さくなるときには、書き込むディスクの数を減らします。

RAID5やRAID6ではストライプサイズが一定のため、ストライプサイズ以下のブロックを読む場合には1つのディスクしか参加しないので、ディスクの数が増えればIOPSは上がります。しかし、ZFSのRAIDでブロックを読む場合には、パリティ以外のすべてのディスクを読んでチェックサムを計算する必要があるので、IOPSはディスク1台分にしかなりません。

耐障害性は9D+2P+1Sで足りるとしても、この構成では小さなブロックサイズのランダムリードがかなり遅くなります。ベンチマークを取ると、1MiBブロックのシーケンシャルリードは550MiB/sと出ますが、128KiBブロックのランダムリードは18.6MiB/sしかでません。

ftp.jaist.ac.jpではIOPSはあまりいりません。アクセスが一部のファイルに集中しているので、巨大なARCとL2ARCにほとんどヒットします。ディスクの性能が必要なのは、新たにリリースされたファイルが1度ARCに読み込まれる間だけといっていいです。そこで9D+2P+1Sという容量重視の構成を選択しました。

一般的には、より小さなRAIDグループを仮想デバイスにしてストライピングしたほうがいいでしょう。ストライピングの場合には1つのブロックはたいてい1つの仮想デバイスに格納されるので、構成している仮想デバイスの数だけIOPSは上がります。

この辺の話はWHEN TO (AND NOT TO) USE RAID-Zに詳しいです。ZFSのRAIDの構成と耐故障性の関係についてはZFS RAID recommendations: space vs MTTDLがわかりやすいです。

0 件のコメント:

コメントを投稿