ディスク障害処理の限界

ストレージ製品の宿命、それはディスクが壊れることです。ディスクが壊れないなら、もうちょっとシンプルな製品ができるでしょう。実際に、ディスク障害時の挙動に目をつぶって、高速処理を謳っている製品は少なくありません。(いまだにRAID0の性能を誇らしげに語る人たちもいますしね。)それはそれで間違いではありません。

OneFSは、筺体をまたいでデータをパリティをつけて保存することで、ノード障害でもデータを保護します。パリティは1個から4個までつけられるので、パリティを4つ付ければ、ディスクが5本同時に壊れない限りデータロストがありません。

さて、RAID5にせよ、6にせよ、OneFSの4パリティにせよ、”NECが謳う世界初トリプルミラー”にせよ、放っておけばいずれ壊れちゃいますので、当然ディスクを交換してパリティからデータの再構築を行います。

RAIDストレージの場合、パリティ再計算した結果をホットスペアディスクに対して流し込むのですが、SASにしろ、SATAにしろ、ディスクのSequential Read/Write性能は未だに100MB/s 程度なので、なかなかに時間がかかります。最近主流の1TBだと、10000sec = 166分、3時間程度かかってしまう計算です。これが今後見えている4TB玉なんていうと、11時間。この規模のディスクストレージであればRAID6以上は必須とは言え、なんとも不安な時間です。この時間は、アーキテクチャ上どうにも超えられない壁ですね。

OneFSはホットスペアを持っていません。あいている領域が全てホットスペア、という考え方で、ディスクが1本壊れると、そのデータは同一ノード内の11本もしくは35本に対して分散して再構築されるので、速い"はず"です。それでも、(1TBディスクであれば)クラスタ全体で1TB分の読み込みと、パリティ計算と、書き込みが行われるわけで、そこは避けようがない部分です。アーキテクチャ上は圧倒的に高速なデータの再構築が行えますし、実際にデータによっては非常に高速に行われます。また、物理的なBlockではなく、ファイル単位で再構築を行うため、10%しか使っていないければ10%分だけ処理すればよい、というのもメリットです。逆に、ファイルがたくさんあると時間がかかるため、そのトレードオフを見極めつつ、多くのユーザ環境で高速になるように実装が行われています。