発端
家に古いPCが何台もたまってくる。大体そいつらのスペックは大したことなくて、せいぜい数十〜数百GBくらいのディスク容量しか持っていない。彼らは退役したファイルサーバなのだけど、それらにバラバラにデータをためとくんだとデータの管理がとても面倒。なので、彼らの力を結集してひとつの大きなファイルサーバを作りたい。
要件
- 沢山のファイルをひとつのインスタンス(ディレクトリツリー)に詰め込むこと。
- No SPOF
- どのサーバがいつ落ちてもよいこと。ただしサーバの二重故障は困るかも。
- フラットなサーバ構成
- どのデータがどのサーバに入ってるとかそういうことは管理したくない。
- スケーラビリティ
- 容量が不足してきたら、サーバを横に足すだけでよい。
録画したテレビのDVDとかたまってくる。市販の録画用DVDは安価で、数年すれば読めなくなる可能性が大きいし、HDD録画機も、秋葉原でのHDDの価格を観ると買う気が起きなくなる。RAIDにしてもいいんだけど、結局RAIDカードがイカれたら意味がない。最近でははてなが苦労しているし、doblogも二重故障に気づかずにひどい目に遭った事例がある。
さらに、最近ではHadoopなど多くの分散ファイルシステムがフリーでリリースされ、垣根が低く安定したものも多く出ていることから、一台のマシンで頑張る必要がなくなってきた。
構成
いわゆるWeb三層構成で、フロントエンドはWebDAVがよさげ。
バックエンドはmemcacheプロトコルを喋る人なら誰でもいいんだけど、スケールするのはKaiだと思う。Kaiならバックアップもやってくれるし*1。テストベッドはmemcachedでやってみたけど。
最初はPyWebDAVというのを発掘して、memcache.pyと組み合わせてみようと思ってたんだけど、やっぱコードは自分で書かないに限る(ええ〜〜)。ので、memcachefsをmod_davのディレクトリにマウントしてしまうのが一番いいだろう、と判断してこういうアーキテクチャになりました。
問題点
ACLというかセキュリティ。
Apacheに丸投げでもいいのかもしれないけど、社内LANで使うならもう一工夫したい。例えば弊社での導入を考えると、数千人の社員がいるのでそこがスケールするかどうかがポイントか。
ファイルサイズの限界
memcachedはデフォルトで1MBが最大サイズなんだけど、最近ではドキュメントといえど1MBを平気で超えるファイルも多い。さらに、動画を視野に入れたときに、
- memcachefsは大丈夫なのか(value sizeを増やせるのか)
- kai (dets)は大丈夫なのか(value sizeを増やせるのか)
等々の心配がある。memcachedの中の仕組みは知らないけど、memcachedのkey/valueをinodeのように見せる仕組みの方が汎用性は高いかもしれない。問題は汎用性を追求するかどうかではなくて、どこに特化するかなんだろうけど。
おまけ
作ったけど使わなかった絵
*1:いつChordが入るのか楽しみにしています