分散ファイルシステム作りは簡単?大変?

twitterのつぶやきをまとめて、少し掘り下げてみるエントリーです。

汎用クラスタリングファイルシステムソフトウェアでノード障害時にデータを守る方法は大きく3つ。

  • 複数ノードのディスクに書き込むまでackを返さない
  • 電源多重障害は絶対に起きないと仮定する
  • クライアント側でロールバックなどを管理するか。

(もうひとつ、「何も考えない」という方法もあって、それはそれで強力な選択肢なのだけれど、ひとまず除外)

1つめはトランザクションが遅すぎてバッチかアーカイブにしか使えない。

2つめは有力だが、PDU障害時にデータを諦めるのはやや乱暴。

3つめはクライアント側がFS特性を意識したシステムを組む必要があり、汎用ではない。(でも、使えれば強い。)

商用アプライアンスは、NVRAMを積んだり、UPSをセットしたり、クライアントドライバを提供したりしてそれぞれの方法の欠点を克服しようとします。どの方法がベスト、ということはなくて、用途と製品の完成度による、としかいいようがないです。

で、アイシロンはNVRAMを利用しています。NVRAMというのは、一言で言えばバッテリーバックアップされたメモリですね。

OneFSというファイルシステムは、ファイルをばらばらに分割して、パリティをつけて、ノードをまたいだRAID5, RAID6のほうに保存する*1という製品です。NFSを例にとると、NFSクライアントがノード1をマウントして、書き込まれたファイルは、分割されて、パリティがついて、それぞれが他のノード(&自分)のNVRAMに記録されて、始めてクライアント側にackが返ります。*2 これによって、たとえ複数ノードが同時に電源ダウンしても、データの不整合が保たれます。*3

一昔前の分散ストレージって、わりとUPSとセットのものが多かった気がします。まあ、瞬断対策や諸々の理由でいまだにUPSは必要とされることがおおいですけどね。

Lustreのように、ストレージの信頼性はストレージ側で確保してね、というものもあったり、この辺の話は範囲もバリエーションも膨大で、とりとめが無くなってしまいますね。


さてさて、かなりわけの分からないエントリーになってきましたが、そろそろ(短い)本題です。

専用のHWを用意できないソフトウェア分散ストレージではどうしているのでしょうか?概ね、1台に書いたところでackを返してあとでコピーするタイプと、「複数台同時に落ちることはない」という前提でメモリ上のやりとりをOKとするタイプの2通りでしょうか。後者の場合、Googleのように規模が大きくて、別ラックとか、別電源系統とか、別DCとかに分散される規模の場合はそれでもOKです。

なにかを妥協するか、規模を大きくするか、アイシロンのような商用品を買うか、世の中選択肢はいろいろですね。

*1:5年前から、こんなざっくりした説明で売ってました。

*2:あえてそうしない動作とか、COMMITの場合など、色々ありますが、説明上割愛

*3:よく誤解がありますが、電源がばしんと落ちた瞬間に書き込み中のデータはもちろん壊れます。クライアントから見て、「かけなかったよ、と言うことが分かる」、と言う意味です。