kikumotoのメモ帳

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

CentOS5.2 + MogileFS + PostgreSQL

前回のメモでは、MogileFS の標準と考えられる MySQL を使ってシステムを構築したけれど、PostgreSQL も可能なようなのでそれを試してみた。

システム構成は前回と同じ。

PostgreSQL の設定

まず、一度やってみてわかったのが CentOS5.2 標準の PostgreSQL 8.1 系は MogileFS では対応していないということ。8.2 以降を利用する必要があった。

そのため、試験管のなかのコード :: CentOS 5 に PostgreSQL をインストールを参考にして、8.2 系をインストールした。別に 8.3 系でもよかったけれどなんとなくで。

PostgreSQL がインストールできれば、以下のようなコマンドを実行してユーザとデータベースを作成した。

$ createuser -P mogile
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) y
CREATE ROLE

$ createdb mogilefs -O mogile
CREATE DATABASE

tracker

モジュールのインストールはMySQLの場合と同じで、

# 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

とした。

つづいてMySQLのときと同様な感じで PostgreSQL を利用するように mogdbsetup を実行するも

# mogdbsetup --dbname=mogilefs --dbuser=mogile --dbpassword=mogile --type=Postgres
Failed to load MogileFS::Store::Postgres: Can't locate MogileFS/Store/Postgres.pm 以降省略

となる。確かに、/usr/lib/perl5/vendor_perl/5.8.8/MogileFS/Store には MySQL.pm しかない。(どおりで、yum でインストールするときに mysql がインストールされるわけだ)

仕方ないので、ソースレポジトリから直接 Postgres.pm を取得した。以下のような感じ。

# cd /usr/lib/perl5/vendor_perl/5.8.8/MogileFS/Store
# wget http://code.sixapart.com/svn/mogilefs/trunk/server/lib/MogileFS/Store/Postgres.pm

これで、再度 mogdbsetup を実行するが今度は

# mogdbsetup --dbname=mogilefs --dbuser=mogile --dbpassword=mogile --type=Postgres
Failed to load MogileFS::Store::Postgres: Can't locate DBD/Pg.pm 以降省略

と怒られた。まぁ、確かに MySQL 前提で rpm は作られているようなので、依存関係に入っていないの当然か。
ということで

# yum -y install perl-DBD-Pg

としてインストール。

これで mogdbsetup をすれば無事成功。ちなみに、PostgreSQL 8.1 系だとここで

Postgres is too old! Must use >=postgresql-8.2! at /usr/lib/perl5/vendor_perl/
5.8.8/MogileFS/Store/Postgres.pm line 65, <STDIN> line 1.

のように怒られる。

最後に /etc/mogilefs/mogilefsd も Postgres 用に最初の行を

db_dsn DBI:Pg:dbname=mogilefs;host=localhost

と修正した。

以上で、

/etc/init.d/mogilefs start

として起動できた。

storage

これは MySQL の場合と同じ方法でOK。

とりあえず、これで完了。