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 をインストールしました)。
では、インストール開始。。。
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 をフォローしませんか?