分散ファイルシステム MogileFS について
※本記事は、旧 Tech Talk Blog 内の 「分散ファイルシステム MogileFS について (http://www.sixapart.jp/techtalk/2006/10/dev_mogilefs.html) 」 で公開されていた記事を移転しました。
初登場になります、酒井といいます。
今回は Six Apart のサービスで使われている MogileFS というファイルシステムを紹介したいと思います。MogileFS については、日本語の情報はあまり...、というかほとんどない状況ですので参考にしていただければと思います。では早速。。。
MogileFS とは
MogileFS とは、Perl で記述されているオープンソースな分散ファイルシステムです。
- プロジェクトホームページ
- http://www.danga.com/mogilefs/
- メーリングリスト
- http://lists.danga.com/mailman/listinfo/mogilefs
上記のホームページ内でも紹介されていますが、主に以下のような特徴があります。
- アプリケーションレベルでの実装なので特殊なカーネルモジュールいらず。
- ファイルを複数ホストに自動コピー / バックアップできる。
- サーバー間でディスクを共有しないので、サーバー単位でのメンテナンスが可能。
- クライアント・サーバー間のプロトコルに HTTP を利用する。
特に特徴的なのは、複数サーバーへの自動コピーによるサーバー単位での冗長化でしょうか?(2番目、3番目)。
単体の NFS サーバーでは、たとえディスクが壊れていなくてもネットワーク等の障害でサーバーからの応答が無くなるとファイルにアクセスできなくなってしまいます。MogileFS は、同一のファイルを複数のサーバーに自動コピーするため、1台のサーバーがダウンしたとしても、ファイルにアクセスできなくなることはありません。
また、SANで使用されるような専用の特殊な装置やプロトコルも使用しないため、一般的なサーバーを使用して安価に構築することができます。
動作イメージ
MogileFS は3つのコンポーネントで構成され、MogileFS にアクセスするための Client API が用意されています(現時点ではPerlのみ)。各コンポーネントの関係は以下のような形になっています。
矢印がリクエストを出す方向で、括弧内に記述されているのが実際に処理を担当するプログラムの名前です。
ここでは、client から指定のファイルを取得する、という動作を例に処理の流れと各コンポーネントの役割を解説したいと思います。
ファイル取得処理フローと各コンポーネントの役割
まず、はじめに client から tracker にファイルの URL を問い合わせます。このとき client から domain と key と呼ばれる値を指定します。
- domain
- ファイル名の名前空間最上位に位置するもので、すべての key は何らかの domain に所属します。
- key
- 一般的なローカルファイルシステムのファイル名にあたる部分です。
tracker は 指定された domain と key を元に、database から
- storage node のホスト名
- storage node のポート番号
- storage node 上で管理されているファイル名(keyとは異なる、MogileFS内部で使用するファイル名です)
を取得します。これらの情報を元にして、ファイルの URL を生成し client に返します。client はその戻ってきた URL に対して HTTP GET でアクセスしファイルのデータを取得します。これで一連の処理が完了です。
各コンポーネントの役割を要約すると、
- trackers
- client と storage nodes との仲介役。
- database
- ファイルのノード情報、storage nodes の情報を保持するデータベース。
- storage nodes
- ファイルの実体を保持する HTTP サーバー。
と言う感じです。
だいたい MogileFS の仕組みがつかめたでしょうか?
少し長くなったので今回はこのあたりで。。。次回はインストールと初期設定あたりについて書いてみようと思います。
Six Apart をフォローしませんか?