MogileFSをCentOS5.5にインストール

MogileFSをCentOS5.5にインストールしてみる。

MogileFSとは

MogileFSとはキーバリュー形式で格納したファイルやデータにアクセスできる分散ファイルシステムです。以下のメリットからソーシャルアプリのメディアサーバとして注目しています。

  1. 特殊なハードウェアやプロトコルが必要ないので、汎用サーバにすぐにインストールできる
  2. ノードの追加が容易でスケーラブルなこと。
  3. 自動レプリケーション、フェールオーバー

MogileFSインストール

ここから、MogileFSのインストールを行います。

MySQLのインストール

MogileFSはファイル格納先の管理をMySQLを用いるのでMySQLをインストールする。

% wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-client-community-5.1.53-1.rhel5.x86_64.rpm/from/http://ftp.jaist.ac.jp/pub/mysql/
% wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-community-debuginfo-5.1.53-1.rhel5.x86_64.rpm/from/http://ftp.jaist.ac.jp/pub/mysql/
% wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-devel-community-5.1.53-1.rhel5.x86_64.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/
% wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-server-community-5.1.53-1.rhel5.x86_64.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/
% wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-shared-community-5.1.53-1.rhel5.x86_64.rpm/from/http://ftp.jaist.ac.jp/pub/mysql/

% rpm -i MySQL-server-community-5.1.53-1.rhel5.x86_64.rpm
% rpm -i MySQL-client-community-5.1.53-1.rhel5.x86_64.rpm
% rpm -i MySQL-devel-community-5.1.53-1.rhel5.x86_64.rpm
% rpm -i MySQL-shared-community-5.1.53-1.rhel5.x86_64.rpm
% rpm -i MySQL-community-debuginfo-5.1.53-1.rhel5.x86_64.rpm 
必要なライブラリのインストール

コンパイラやもろもろ必要なライブラリがあるので、インストールします。

% yum -y install gcc gcc-devel
% yum -y install perl-libwww-perl
% yum -y install perl perl-devel
必要なPerlモジュールのインストール

Perlのモジュールがいくつ必要なので、cpanでインストールして行きます。

まずはcpan自体のインストールから。初回起動時には対面式のインストーラが起動します。
今回は地域選択以外はデフォルトオプションでインストールします。

% cpan #地域選択以外のインストールオプションはデフォルト
.
.
.
(1) Africa
(2) Asia
(3) Australasia
(4) Central America
(5) Europe
(6) North America
(7) Oceania
(8) South America
Select your continent (or several nearby continents) [] 2
Sorry! since you don't have any existing picks, you must make a
geographic selection.

(1) China
(2) Hong Kong
(3) India
(4) Indonesia
(5) Japan
(6) Republic of Korea
(7) Russia
(8) Singapore
(9) Taiwan
(10) Thailand
(11) Turkey
Select your country (or several nearby countries) [] 5


(1) ftp://ftp.dti.ad.jp/pub/lang/CPAN/(2) ftp://ftp.jaist.ac.jp/pub/CPAN/
(3) ftp://ftp.kddilabs.jp/CPAN/
(4) ftp://ftp.nara.wide.ad.jp/pub/CPAN/
(5) ftp://ftp.riken.jp/lang/CPAN/
(6) ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
(7) ftp://ftp.u-aizu.ac.jp/pub/CPAN
(8) ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
Select as many URLs as you like (by number),
put them on one line, separated by blanks, e.g. '1 4 5' [] 1

cpanのインストールが終わったらPerlのライブラリをそれぞれcpanでインストールします。

cpan> install Net::Netmask
cpan> install Danga::Socket
cpan> install IO::AIO #Linux::AIOでもよい
cpan> install Perlbal
cpan> install MogileFS::Client
cpan> install DBD::mysql
cpan> exit
MogileFSのインストール

ここからMogileFS本体をインストールします。
subversionの最新のソースを使いたいのですが、subversionでダウンロードしたファイルの中にあるMogile FS::Serverをインストールすると、サーバ起動時にエラーが発生するので、MogileFS::Serverは別途ダウンロードしてインストールしています。

またmake test のどこかでDBの設定がハードコードされているらしく動作しないようなのでmake testは行いません。
http://www.sixapart.jp/techtalk/2006/10/dev_mogilefs_install.html

% wget http://search.cpan.org/CPAN/authors/id/D/DO/DORMANDO/MogileFS-Server-2.43.tar.gz% tar xvf MogileFS-Server-2.43.tar.gz
% cd MogileFS-Server-2.43
% perl Makefile.PL
% make
% make install
% wget -r -l 0 http://code.sixapart.com/svn/mogilefs/trunk/utiles
% cd code.sixapart.com/svn/mogilefs/trunk/utils/
% perl Makefile.PL
% make
% make install
Apacheのインストール

MogileFSWebDavでファイルを取得できるのが大きなメリットです。mogstoredのWebサーバはPerlbal実装ですが、今回は外部向けをApache、内部をPerlbalと使い分けるために、最新のapache入手し、インストールします。

% wget http://ftp.kddilabs.jp/infosystems/apache//httpd/httpd-2.2.17.tar.gz
% tar xvf httpd-2.2.17.tar.gz
% cd httpd-2.2.17
% vi INSTALL # インストール方法を調べる
% ./configure
% make
% make test
% make install

以上で必要なコンポーネントのインストールが完了。

MogileFSの設定

ここからはMogileFSの設定をします。

DB設定

mogdbsetupコマンドを使って、MogileFS用のDBを設定します。これでパスワードがmogilemanagerのmogileユーザと各管理テーブルがインストールされます。デフォルトだとどこからでもアクセスできるユーザになっているので、LAN内からのアクセス許可に変更しておいた方が良いかもしれません。

% mogdbsetup --dbuser=mogile --dbpass=mogilemanager --yes
% mysql
mysql> select host,user from mysql.user;
+------------+-----------+
| host       | user      |
+------------+-----------+
| %          | mogile |
| 127.0.0.1  | root      |
| localhost  |           |
| localhost  | mogile |
| localhost  | root      |
| vm30801247 |           |
| vm30801247 | root      |
+------------+-----------+
7 rows in set (0.00 sec)

mysql> update mysql.user set host='192.168.1.%' where host='%' and user='mogile';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select host,user from mysql.user;
+-------------+-----------+
| host        | user      |
+-------------+-----------+
| 192.168.1.% | mogile |
| 127.0.0.1   | root      |
| localhost   |           |
| localhost   | mogile |
| localhost   | root      |
| vm30801247  |           |
| vm30801247  | root      |
+-------------+-----------+
7 rows in set (0.00 sec)
ユーザ作成

mogileFSで使うユーザを作成します。

% useradd mogile
設定ファイルの編集

設定ファイル用のディレクトリを用意し、サンプルの設定ファイルを移動します。また、設定ファイルに記述予定のデータ保存先ディレクトリもあらかじめ作っておきます。

% mkdir -p /etc/mogilefs
% cp ~/src/code.sixapart.com/svn/mogilefs/trunk/server/conf/mogstored.conf /etc/mogilefs/
% cp ~/src/code.sixapart.com/svn/mogilefs/trunk/server/conf/mogilefsd.conf /etc/mogilefs/
% mkdir -p /var/mogdata

コピーしたファイルをもとに設定ファイルを編集します。
mogstored.confはファイルを保持し、WebDavで公開するmogstoredの設定ファイルです。
mogilefsd.confはDBの情報をもとにファイルの管理をするtrackerの設定ファイルです。

% vi mogstored.conf
maxconns = 10000

#この値でWebDavを公開するので
httplisten = 0.0.0.0:7500
#Perlbal管理用 
mgmtlisten = 0.0.0.0:7501
docroot = /var/mogdata

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

trackerとnodeの両方を起動します。trackerはmogileユーザで起動する必要があります。

% mogstored -d
% sudo -u mogile mogilefsd
host,device,domain,classの登録と動作確認
# 設定(strage node サーバの登録)
$ mogadm check #状態確認

#ここで登録するホストの情報とmogstored.confの情報がずれているとうまく動かないので注意
$ mogadm host add localhost --port=7500 

# 設定( deviceの登録・作成) デバイス−>ディレクトリ
$ mogadm device add localhost 1
$ mogadm device add localhost 2
$ mogadm device add localhost 3
$ cd /var/mogdata
$ mkdir dev1 dev2 dev3
$ mogadm device list
localhost [1]: down
                   used(G) free(G) total(G)
  dev1: down       0.000   0.000   0.000 
  dev2: down       0.000   0.000   0.000 
  dev3: down       0.000   0.000   0.000  

# 設定host とdeviceの設定
$ mogadm host mark localhost alive
$ mogadm check

# domain と classの設定(class: 自動コピーする数の管理。)
$ mogadm domain add sixapart
$ mogadm class add sixapart normal --mindevcount=2
$ mogadm domain list

# テスト
# /root/mogail_test.txtをキーtest1として保持。
$ mogtool --trackers=127.0.0.1:7001 --domain=sixapart --class=normal inject /root/mogail_test.txt test1
$ mogtool --trackers=127.0.0.1:7001 --domain=sixapart --class=normal extract test1 /root/mogail_return.txt