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 で動作させてみたい。