mogileユーザーを作成しログインして作業開始します。
必要なモジュールをインストール
cpanm YAML cpanm Sys::Syscall cpanm IO::AIO cpanm Net::Netmask cpanm Perlbal cpanm MogileFS::Client cpanm Gearman::Server cpanm Gearman::Client cpanm Gearman::Client::Async
MogileFSとMogileFS::Serverをインストール
subversionでMogileFSをダウンロードする。
mkdir -p ~/src/mogilefs cd ~/src/mogilefs svn co http://code.sixapart.com/svn/mogilefs/trunk/
MogileFSの主要コンポーネントをインストール
cd trunk/server perl Makefile.PL make make install
subversionでダウンロードしたファイルの中にあるMogileFS::Serverをインストールすると、サーバ起動時に下記のようなエラーが出てしまいます。
Can't locate MogileFS/RebalancePolicy/DrainDevices.pm in @INC
ですので、CPANから別途ダウンロードしてインストールします。
wget http://search.cpan.org/CPAN/authors/id/D/DO/DORMANDO/MogileFS-Server-2.43.tar.gz tar xvzf MogileFS-Server-2.43.tar.gz cd MogileFS-Server-2.43 perl Makefile.PL make make install
MogileFSの管理ツールをインストール
cd trunk/utils perl Makefile.PL make make install
データベースのセットアップ
mogdbsetupコマンドで設定します。今回MySQLのソケットが/tmpになかったのでオプションで指定するようにしました。ただ、ソケットのオプションがなかったので、dbportオプションを介して指定しました。
mogdbsetup --dbport=3306\;mysql_socket=/data/mysql/mysql.sock
設定ファイルを作成して起動
trackerの設定ファイルは「trunk/server/conf/mogilefsd.conf」にあります。
storage nodeの設定ファイルは「trunk/server/conf/mogstored.conf」にあります。
trackerの設定(mogilefsd.conf)
daemonize = 1
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = mogile
db_pass = mogpass
conf_port = 7001
listener_jobs = 10
storage nodeの設定(mogstored.conf)
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = ~/var/mogdata
それぞれコマンドで設定を読み込ませて起動します。
mogilefsd -c mogilefsd.conf sudo mogstored -c mogstored.conf -d
下記のコマンドで動作確認します。
mogadm check
ノードサーバを追加
mogadmコマンドで作業していきます。
mogadm host add localhost --port=7500
deviceの登録と作成と認識
mkdir -p ~/var/mogdata/dev1 mkdir -p ~/var/mogdata/dev2 mogadm device add localhost 1 mogadm device add localhost 2 mogadm host mark localhost alive
ドメインとクラスを設定
mogadm domain add hogehoge mogadm class add hogehoge normal --mindevcount=2 mogadm domain list
ドメインはclientで接続するときに使用します。
以上で設定終わり。下記のページを主に参考にしています。
MogileFS のインストールと初期設定 : Tech Talk Blog - Six Apart
クライアント
#!/usr/bin/env perl use strict; use warnings; use MogileFS::Client; ## インスタンス作成 my $mogfs = MogileFS::Client->new( domain => 'hogehoge', hosts => [ '127.0.0.1:7001' ], ); die "Unable to initialize MogileFS object." unless $mogfs; ## key「hello」のファイルを作成 my $key = "hello"; my $fh = $mogfs->new_file($key, "normal") or die $mogfs->errstr; $fh->print("Hello, MogileFS!!") or die $mogfs->errstr; $fh->close or die $mogfs->errstr; ## key「hello」ファイルの読み込み my $data = $mogfs->get_file_data($key); die $mogfs->errstr unless $data; print $$data . "\n"; ## key「hello」ファイルのURLを取得 my @paths = $mogfs->get_paths($key); ## key「hello」ファイルの削除 $mogfs->delete($key);
参考リンク
- 分散ファイルシステム MogileFS について : Tech Talk Blog - Six Apart
- MogileFSとPerlbalをインストールする - builder by ZDNet Japan
- MogileFS のインストールと初期設定 : Tech Talk Blog - Six Apart
- MogileFS::Client と MogileFS 内部でのファイルノード管理 : Tech Talk Blog - Six Apart
- Issue 28 - mogilefs - Regression due to removal of Rebalance Policies - Project Hosting on Google Code