MogileFS のインストールと初期設定

※本記事は、旧 Tech Talk Blog 内の 「はてなブックマーク - 」 で公開されていた記事を移転しました。

酒井です。タイトルの通り、今回は MogileFS のインストールから初期設定までをずらずらと紹介します。

MogileFS では各コンポーネントごとに別サーバーを割り当てるのが通常ですが、実際には1台ですべてのコンポーネントを稼動させることができますので、colinux などの環境で手軽に実験することが可能です。今回使用した環境は、

  • Debian/sid (colinux)
  • perl 5.8.8
  • MySQL 5.0 (non cluster)

です。

また、使用する MogileFS のバージョンは、現時点では開発中ですがもうすぐリリースとなる(はずの)バージョン 2.0 を SVN リポジトリ の trunk からチェックアウトして使用します(revision 421 をインストールしました)。

リポジトリURL
http://code.sixapart.com/svn/mogilefs/

では、インストール開始。。。

CPAN モジュールのインストール

MogileFS で使われる以下 CPAN モジュールをあらかじめインストールしておきます。

  • Net::Netmask
  • Danga::Socket
  • Linux::AIO または IO::AIO
  • Perlbal

Linux::AIO または IO::AIO ですが、mogstored (storage node) の HTTP の実装として使われている Perlbal で必要になります。ただ、Linux::AIO は RedHat 系のディストリビューションではインストールできない場合が多いようです(FedoraCore4で確認)。

Perlbal では Linxu::AIO > IO::AIO の順番で探してインストールされているものを使用しますので、Linxu::AIO の make test で失敗するようであれば、IO::AIO をインストールしてください(こちらはインストールでの問題が少ないようです)。

% sudo cpan
cpan> install Net::Netmask
cpan> install Danga::Socket
cpan> install Linux::AIO
cpan> install Perlbal

MogileFS 配布物のインストール

まずは、どこか適当な作業ディレクトリに、リポジトリからチェックアウトします。

% cd ~/tmp/mogile
% svn co http://code.sixapart.com/svn/mogilefs/trunk

無事チェックアウトできたら、server, api, utilities の各ディレクトリでインストール作業を行います。各ディレクトリの内容は、

server
tracker, storage node サーバーで必要になるコマンドと Perl モジュールが含まれています。
api
client サーバーで必要になる API が含まれているディレクトリです。現時点では Perl 向け API のみ配布物に含まれています。
utilities
MogileFS の設定・管理に必要なユーティリティコマンド(mogadm)が含まれています。

となっています。

インストール手順は Perl モジュールの手順と同じで、各ディレクトリで以下コマンドを実行します。

% perl Makefile.PL
% make
% make test
% sudo make install

server の make test 時に MySQL にテスト用のスキーマを自動的に作成するのですが、root ユーザーでパスワードなし、という設定でテスト用ライブラリ(t/lib/mogtestlib.pl)にハードコードされていますので、必要に応じてテストコードを書き換えるなどしてください。

DB スキーマ作成

mogdbsetup コマンドを使用して、DB スキーマを作成します。

% mogdbsetup --dbuser=mogile --dbpass=mogpass --yes

上記のオプションでは、MySQL に mogile というユーザーをパスワード mogpass で接続できるように作成し、対話形式の返答をすべて yes で返します。

その他のオプションについては、--help で確認してください。

tracker (mogilefsd) の設定

mogilefsd は root ユーザー以外で実行する必要があるので mogilefsd 専用のダミーユーザーを作っておきます。

% sudo useradd -s /bin/false mogile

続いて設定を記述します。/etc/mogilefs/mogilefsd.conf がデフォルトの設定ファイルのパスになっていますが、起動時に -c オプションで明示的に指定することもできます。

今回はデフォルトのパスに以下の内容でファイルを作成します。

## デーモンとして実行する
daemonize = 1
## DB接続先. ユーザー, パスワード
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = mogile
db_pass = mogpass
## mogilefsd が client からの要求を受け付けるポート番号
conf_port = 7001
## client からの要求を処理するプロセスの数
listener_jobs = 10

これで mogielfsd を起動することがことができます。

% sudo -u mogile mogilefsd

storage node (mogstored) の設定

設定ファイル

/etc/mogilefs/mogstored.conf がデフォルトの設定ファイルのパスになっています。mogilefsd と同様 -c オプションで明示的に指定可能です。

今回はデフォルトのパスに以下の内容でファイルを作成します。

## HTTP リクエストを待ち受け付ける IP・ポート
httplisten = 0.0.0.0:7500
## Perlbal 管理用リクエストを受け付ける IP・ポート
mgmtlisten = 0.0.0.0:7501
## Apache の設定で言うところの DocumentRoot
docroot = /var/mogdata

mogstored は root ユーザーで起動します。

% sudo mogstored -d
storage node の登録

ここからは mogadm コマンドを使用して設定していきます。まずは、check で現状確認です。

% mogadm check
Checking trackers...
127.0.0.1:7001 ... OK
Checking hosts...
No devices found on tracker(s).

使用する storage node サーバーを登録します。

% mogadm host add add localhost --port=7500
% mogadm check
Checking trackers...
127.0.0.1:7001 ... OK
Checking hosts...
[ 1] localhost ... skipping; status = down
No devices found on tracker(s).

tracker が localhost を host(storage node) として認識できました。

device の登録・作成

続いて device の登録・作成です。MogileFS における device は、大雑把に言うとただのディレクトリです。まず、localhost で使用する device の id を登録します。

% mogadm device add localhost 1
% mogadm device add localhost 2
% mogadm device add localhost 3

1、2、3 の id で localhost に device を追加しました。この id は、MogileFS 全体でユニークな id なので、別の host を追加した場合でも重複した id を使用することはできません。

続いて、mogstored.conf の docroot で指定したディレクトリに、dev<device id> という名前のディレクトリを作成します。

% cd /var/mogdata
% sudo mkdir dev1 dev2 dev3
% mogadm device list
localhost [1]: down
used(G) free(G) total(G)
dev1: down       0.743   0.240   0.983
dev2: down       0.743   0.240   0.983
dev3: down       0.743   0.240   0.983

これで device の登録・作成は完了です。

状態変更

storage node として使用する host と device の登録が済みましたので、それらを使用可能な状態に変更します。

% mogadm check
Checking trackers...
127.0.0.1:7001 ... OK
Checking hosts...
[ 1] localhost ... skipping; status = down
No devices found on tracker(s).

現時点では、『status = down』と表示されますが、この status を変更する必要があります。変更は host mark で行います。

% mogadm host mark localhost alive
% mogadm check
Checking trackers...
127.0.0.1:7001 ... OK
Checking hosts...
[ 1] localhost ... OK
Checking devices...
host device            size(G)    used(G)    free(G)   use%
---- --------------- ---------- ---------- ---------- ------
[ 1] dev1                0.984      0.743      0.242  75.45%
[ 1] dev2                0.984      0.743      0.242  75.45%
[ 1] dev3                0.984      0.743      0.242  75.45%
---- --------------- ---------- ---------- ---------- ------
total:     2.953      2.228      0.725  75.45%

host mark で設定可能な状態は以下の4種類です。

alive
書き込み、読み込み可能。
down
一時的に使用不可。
dead
使用不可。ファイルは別の場所にコピーされている。
readonly
読み込み専用。

device も同じように状態を変更できます。

これで、storage node として使用可能になりました。

domain と class の設定

最後に domain と class を設定します。

% mogadm domain add sixapart
% mogadm class add sixapart normal --mindevcount=2
% mogadm domain list
domain               class                mindevcount
-------------------- -------------------- -------------
sixapart             default                   0
sixapart             normal                    2

class は自動コピーする数を管理しています。ファイル作成時に class を指定することで、その class のmindevcount で指定されている数の node でコピーを保存します。default クラスは指定がなかったときに内部的に使われるものです。

この class の設定をいくつか用意することで、

  • どうでもいいファイルはコピーなし(mindevcount=0 or1)
  • なんらかの操作で再構築可能なファイルは 2 nodes で保存(mindevcount=2)
  • 再構築できない重要なファイルは 3 nodes で保存(mindevcount=3)

といった使いわけが可能になります。

以上ですべての初期設定が完了です。

次は...

次回のエントリーでは、Client API の使い方あたりを少々解説したいと思います。

Six Apart をフォローしませんか?

次の記事へ

ウェブアプリケーションのテストの仕組みを読み解こう

前の記事へ

分散ファイルシステム MogileFS について