読者です 読者をやめる 読者になる 読者になる

nginx mogilefs moduleが素晴らしい

MogileFS nginx

nginx mogilefs moduleはモジュールとしてnginxに組み込んで使うMogileFSクライアント。これを使うと、「普通のWebDAVのようにアクセスできるのに背後にあるストレージはMogileFS」ということを簡単にできる。

インストール

nginxの再ビルドが必要。

$ wget http://www.grid.net.ru/nginx/download/nginx_mogilefs_module-1.0.2.tar.gz
$ tar xzf nginx_mogilefs_module-1.0.2.tar.gz
$ wget http://sysoev.ru/nginx/nginx-0.7.61.tar.gz
$ tar xzf nginx-0.7.61.tar.gz
$ cd nginx-0.7.61
$ ./configure --add-module=../nginx_mogilefs_module-1.0.2
$ make
$ sudo make install

設定

設定項目については英語のドキュメントに丁寧に書かれているので、最小限の設定だけを示す。nginxを動作させるための基本設定も省いてある。

http {
    server {
        location /mogilefs/ {
            mogilefs_tracker 127.0.0.1:6001;
            mogilefs_domain  test.examle.com;
            mogilefs_methods GET PUT DELETE;
            mogilefs_pass {
                proxy_pass $mogilefs_path;
                proxy_hide_header Content-Type;
                proxy_buffering off;
            }
        }
    }
}

使い方

上記の設定で、

$ curl --upload-file ~/test.txt http://localhost/mogilefs/test

のようにファイルをPUTすると、test.examle.comドメインにtestというキーでファイルを格納したことになる。つまり、mogtoolで言えば、

$ mogtool --trackers=127.0.0.1:6001 --domain=test.examle.com inject ~/test.txt test

と同じ。クラスはたぶんdefaultで設定一覧を見る限り変更手段がない?このあたりは未確認。

【追記】1.0.2ではクラスを設定することはできない。これは次の1.0.3で修正されると思う。下記のページにあるパッチを参照。

今格納したファイルを取り出すには、

$ curl http://localhost/mogilefs/test

と普通にHTTP GETすればいいし、削除するにはHTTP DELETEメソッドを使えばよい。


GETした時のContent-TypeやMogileFSのドメイン・クラスを制御するにはnginxの設定やアプリケーション側で頑張らないと駄目そうだけど、今後は「Perl以外は良いMogileFSクライアントがないなぁ」とか悩む必要がなさそうなのが非常に期待できる。

自分でMogileFS PerlクライアントとHTTP:Engineで同じようなものを書こうかと思っていたが、その必要もなさそうだ。