kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

分散ファイルシステムを調べたい - MogileFS

MogileFS について調べてみた。使ってみたわけではない。

1. ファイルを分割して保存するかどうか

分割しない。

が、1ファイルにつき 100MB の制限があるらしく、クライアントライブラリのオプション(bigfile)で分割して保存する必要があるらしい。(参考:http://www.slideshare.net/kazuhisa/090214ldd-mogilefs?src=related_normal&rel=127971

分割した場合って、各断片は同じのストレージノードに保存されてしまうのだろうか?

2. サーバーやディスクが落ちても問題なくアクセスを受け付けられるか

受け付けられる。

3. サーバーやディスクが落ちたときにデータが失われないか

  • ファイルを自動で別なストレージノードに複製してくれる。
  • 複製は、file class というものに基づいて複製数が決まる。file class 毎に複製数の変更ができる。
  • ファイルの書き込み後、バックグラウンドで複製は行われる。

4. サーバーやディスクが落ちたとき、もしくはそれらが復帰したときに自動的にデータが修復されるか

Reaper というプロセスが、サーバ・ディスクが落ちたときに、複製数を満たすように必要なファイルを複製処理に回すように見える。

古いデータを持ったサーバが復帰してくるとどうなるのだろう?

5. データ量の偏りがないように自動的にデータを再配置することができるか

なんか、この機能はない感じ。

6. メタデータサーバの冗長化機能はあるか

MogileFS 自体にはその機能はないが、MogileFSメタデータを DB に保存するらしく、その DB を HA 構成にすることで可用性を確保できる。
ちなみに、DB は、MySQL, PostgreSQL, SQLite が対応しているようだ。http://code.sixapart.com/svn/mogilefs/trunk/server/lib/MogileFS/Store/

7. 読み込みの負荷分散

ファイルのありかを問い合わせると、I/O の利用状況に基づいてアクセスできるストレージノードのリストが返ってくるらしく、そのリストを使ってアクセスすれば負荷分散になる感じ。

8. 書き込みの負荷分散

基本的にファイルを分割しないので、1ファイルだけをみた場合、その書き込みが負荷分散されることはなさそう。複数のファイルでみた場合は、適切に分散されて書き込まれるのだと思う。

9. 動的なサイズの拡張

問題なさそう。mogadm で add すればよさそう。

10. 動的なサイズの縮小

問題なさそう。mogadm で delete すればよさそう。

11. 実装形態(言語とか、カーネルパッチの必要性とか、利用する側の言語とか)

Perlカーネルパッチは不要。アクセスするためのクライアントライブラリは、http://mogilefs.pbwiki.com/Client%20Libraries にあるように Perl だけじゃなく、Java とか Ruby もある。

12. mount できるか

FUSE で mount するプロトタイプはあるみたい。

13. random access 可能か

できない。シーケンシャルリードのみ。書き込みは一度だけ(全部を置き換えることで変更をすることになる)。

14. 実績はどんなものか

LiveJournal, Digg ・・・(参考:http://www.slideshare.net/kazuhisa/090214ldd-mogilefs?src=related_normal&rel=127971)。
自分的にはこれだけの実績があるならOK。

15. ライセンス

ドキュメントでライセンスについて書いてあるものがない?みたいだけど、ソースをみると

=head1 LICENSE

Same terms as Perl itself. Artistic/GPLv2, at your choosing.

とあるので、Artistic と GPLv2 のデュアルライセンスのようだ。


以上な感じなので、これは後で実際にいじってみることにしよう。いくつか疑問点もあるし。

特に、気になるのはデータの再配置かな。なんらかの回避手段があればそれでもいいので、実際にいじってみて考る。

とりあえず、MogileFS はこんなところで一旦よしとしよう。