kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

CentOS5.2にMogileFSをインストールした

Fedoraレポジトリにあるrpmを利用して、CentOS5.2にMogileFSをインストールしたときの手順メモ。

システム構成

3台のサーバを用意して、1台をtrackerに、残りの2台をstorageとした。
IPやホスト名は以下の通り。

役割 ホスト名 IP
tracker mogile1 192.168.251.61
storage mogile2 192.168.251.62
storage mogile3 192.168.251.62

MySQL の設定

MySQL のインストールについては省略。データベースサーバー構築(MySQL) - CentOSで自宅サーバー構築 にほぼ従った。

MogileFSが使うデータベースを以下のように準備した。

mysql> CREATE DATABASE mogilefs;
mysql> GRANT ALL ON mogilefs.* TO 'mogile'@'%';
mysql> SET PASSWORD FOR 'mogile'@'%' = OLD_PASSWORD( 'mogile' );
mysql> FLUSH PRIVILEGES;
mysql> exit

ここでパスワードをmogileとしているのは、rpmでインストールされるデフォルトの設定ファイルでそのように指定されているためであり、パスワードを変える場合は、設定ファイルも忘れずに変更する必要がある。

tracker

trackerのインストールは以下のコマンドを実行した。

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
# yum -y install mogilefsd perl-MogileFS-Client perl-MogileFS-Utils

設定ファイルは/etc/mogilefsに配置される。とりあえずデフォルトのまま。

引き続き、データベースのセットアップを実行。

# mogdbsetup --dbname=mogilefs --dbuser=mogile --dbpassword=mogile

以上でtrackerのインストール・設定は終わりなので、以下のコマンドで起動しておいた。

# /etc/init.d/mogilefsd start

storage

storageのインストールは以下のコマンドを実行した。

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
# yum -y install mogstored mogstored-backend-perlbal mogstored-backend-lighttpd mogstored-backend-apache perl-MogileFS-Client perl-MogileFS-Utils

このパッケージを使うとApacheやらlighttpdやらまでインストールされてしまうがとりあえず今は許容しておいた。(mogstored-backend-xxxx 自体はこれらがないと起動できないので必要。)

データの格納ディレクトリを以下のようにして作成。

# cd /home
# mkdir -p mogdata/dev1
# chown -R mogstored.mogstored mogdata/

なお、devの後ろの数字は device id と呼ばれるもので、MogileFS システムで一意である必要があるらしい。そのため、mogile3ではここを2として作成した。

設定ファイルは/etc/mogilefs/mogstored.confに作成する必要があるが、ディレクトリから無かったのでそこから作成した。設定ファイルは以下のように記述。

httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /home/mogdata

次にstorageをtrackerに登録するという作業をした。(すべてのstorageについて同様なことをする)

# mogadm --trackers=192.168.251.61:6001 host add mogile2 --ip=192.168.251.62 --port=7500

さらにdeviceをtrackerに登録するという作業も必要。

# mogadm --trackers=192.168.251.61:6001 device add mogile2 1

この最後の数字は上記でも述べた device id のこと。なので、mogile3 については2を指定した。

以上でstorageを

/etc/init.d/mogstored start

として開始したが

Starting MogileFS tracker daemon: ERROR: Need to be root to increase max connections.

のメッセージが表示されたた、http://www.pommetab.com/tag/mogilefs/ を参考にして /etc/security/limits.conf に

mogstored soft nofile 65535
mogstored hard nofile 65535

を追記した。これで、

/etc/init.d/mogstored restart

とすれば無事に起動した。

この状態では tracker に storage は down というステータスで認識されているので、以下のコマンドで alive というステータスにして実際に使える状態にした。

# mogadm --trackers=192.168.251.61:6001 host mark mogile2 alive

状態確認

ここまでうまくいっていれば、trackerで

# mogadm check
Checking trackers...
  localhost:6001 ... OK

Checking hosts...
  [ 1] mogile2 ... OK
  [ 2] mogile3 ... OK

Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  [ 1] dev1             5.202      0.146      5.056   2.80%  writeable   5.0
  [ 2] dev2             5.202      0.146      5.056   2.80%  writeable   0.0
  ---- ------------ ---------- ---------- ---------- ------
             total:    10.403      0.291     10.112   2.80%

のように表示されればOK。

読み書き

mogtool というツールが tracker にも storage にもインストールされており、これを使うことで MogileFS にファイルを書き込んだ入り、MogileFS からファイルを読み出したりできる。

その前に、ドメインというものをあらかじめ用意しておく必要がある。また、必須ではないがクラスというものも用意しておく。クラス毎に複製数を設定できるようになっている。

# mogadm --trackers=192.168.251.61:6001 domain add mydomain
# mogadm --trackers=192.168.251.61:6001 class add mydomain myclass --mindevcount=3

書き込みは以下のようにして試した。

$ echo hoge > hoge.txt
$ mogtool --trackers=192.168.251.61:6001 --domain=mydomain --class=myclass inject hoge.txt file1
file file1: c59548c3c576228486a1f0037eb16a1b, len = 5
Spawned child 2750 to deal with chunk number 1.
        chunk 1 saved in 0.09 seconds.
Child 2750 successfully finished with chunk 1.
Beginning replication wait: 1
Beginning replication wait: 1

ファイルがどこに保存されているかは以下のコマンドで確認できた。

$ mogtool --trackers=192.168.251.61:6001 --domain=mydomain locate file1
http://192.168.251.62:7500/dev1/0/000/000/0000000003.fid
http://192.168.251.63:7500/dev2/0/000/000/0000000003.fid
#2 paths found

myclass クラスの複製数は3に設定したけど、デバイスが2つしかないので複製は2つしかないのだと思う。

ファイルを読み出すのは以下のコマンド。

$ mogtool --trackers=192.168.251.61:6001 --domain=mydomain extract file1 geho.txt
Fetching piece 1...
        Trying http://192.168.251.63:7500/dev2/0/000/000/0000000003.fid...
Done.

困ったこと

今回のインストールはstorageを2台を最初から用意しているが、1台のみで構成するとmogtoolでの書き込み時に

Beginning replication wait: 1

が繰り返し表示され終わらない状況になってしまった。原因究明は結局できず最初から2台で構成したらうまくいくみたいなので、とりあえずそれ以上調べなかった。

さいごに

storageを1台構成にして嵌ったこと以外は、意外とすんなりと動作した。この後は、MySQL じゃなく PostgreSQL で動作させてみたい。