$ sudo vi /etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
32bit版の場合はURLの「x86_64」を「i686」に書き換えれば出来る。
2.yumコマンドでインストール
$ sudo yum install mongodb-org
3.起動
$ sudo /etc/init.d/mongod start
Starting mongod: [FAILED]
4.起動失敗した原因を調べる
sudo view /var/log/mongodb/mongod.log
2014-10-29T11:58:37.248+0900 [initandlisten] ERROR: Insufficient free space for journal files
2014-10-29T11:58:37.248+0900 [initandlisten] Please make at least 3379MB available in /var/lib/mongo/journal or use --smallfiles
どうやら原因はディスクの空きが足りないことらしい。
調べてみると、MongoDBのデフォルト設定ではジャーナルファイルというものを作るようになっており、 そのファイルを作成するにあたって3.5GB近い空き容量が必要になるみたいです。
なので、自分のサーバの空き容量を確認してみます。
5.自分のサーバの空き容量を調べる。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.9G 5.2G 2.4G 69% /
tmpfs 499M 0 499M 0% /dev/shm
確かに容量が足りていなかった。
容量追加しないといけないのかとも思ったが、ジャーナルファイルなるものは開発環境では特に必要ないんじゃないかということで、このファイルを作成しないように設定を変えました。
6.ジャーナルファイルを生成しないように設定を変える
$ vi /etc/mongod.conf
# Disables write-ahead journaling
# nojournal=true
↓
# Disables write-ahead journaling
nojournal=true
7.再度起動させてみる
$ sudo /etc/init.d/mongod stop
Stopping mongod: [ OK ]
無事起動しました。
続いてPHPで使用出来るようにします。
まずインストールに必要なものをあらかじめインストールしておきます。
$ sudo yum -y install gcc php-pear php-devel
続いてpecl経由でmongoのExtentionをインストール
途中で質問があるが、そのままEnterでOK。
$ sudo pecl install mongo
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading mongo-1.5.6.tgz ...
Starting to download mongo-1.5.6.tgz (193,219 bytes)
.........................................done: 193,219 bytes
116 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
Build with Cyrus SASL (MongoDB Enterprise Authentication) support? [no] :Enter
building in /var/tmp/pear-build-roottRXj7r/mongo-1.5.6
mongo用にiniファイルを新規作成
$ sudo vi /etc/php.d/mongo.ini
extension=mongo.so ← これを書く
apacheを再起動させます。
$ sudo /etc/init.d/httpd restart
mongoが使用出来る状態になっているか確認します。
下記のように「mongo」と出てきたら成功です。
$ php -m | grep -i mongo
mongo
おまけ
ジャーナルファイルに関して調べてみました。
ここでは簡単にしか記載しませんが、ざっくりとまとめると、
・Mongoは書き込み処理の結果を気にしないので、高速に書き込める。
・Mongoは、まずメモリ上に スタックされ、60秒に1回の間隔でディスクに書き込む。
・ディスクに書き込まれていないデータは、サーバダウンによって消えるため、最大60秒間のデータを失う可能性がある。
・ver1.7までの対応策として用意されている機能は2つあるが、いずれもパフォーマンスを著しく低下させるものである。
・ver1.8にジャーナリング機能が実装され、100ミリ秒に1回ジャーナルファイルに書き込むことで、データ損失のリスクが低減された。しかしパフォーマンスはある程度低下する(30%程度)
ジャーナルファイルに関しては以下の記事に詳しく書いてある。
http://doryokujin.hatenablog.jp/entry/20110614/1308010072