MongoDB – インストール CentOS/Scientifc Linux

公開日:2014年11月24日
MongoDB Version:2.6

MongoDBをCentOS/Scientific Linuxにインストールするにはyumを使用する方法、または、tgzを任意のフォルダに展開して起動する方法があります。

  • サーバで起動する場合はyum
  • 個人でテスト、または、バージョンを自分で管理する場合はtgzの展開

が向いています。

個人的にはtgzを展開して、自分でバージョンや設定を管理するのが楽だと思いますが、ここらへんは個々の事情や環境を考慮して決めて下さい。



yumでインストール

yumでインストールする場合、root権限が必要です。

手順

  1. yumリポジトリファイルの作成
  2. パッケージのインストール
  3. 設定ファイルの編集

yumリポジトリファイルの作成

CentOSやScientific Linuxのyumを使ってMongoDBをインストールする場合、/etc/yum.repos.dディレクトリにファイルを作成します。

ファイル名は末尾に「.repo」が付いていれば、何でも構いませんが、今回はMongoDBのWebサイトの説明に合わせてmongodb.repoとします。

/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

パッケージのインストール

最新バージョンをインストールする場合、mongodb-orgを指定すれば必要なパッケージを含めてインストールされます。

sudo yum install mongodb-org

インストールされるパッケージは以下になります。

  • mongodb-org
  • mongodb-org-mongos
  • mongodb-org-server
  • mongodb-org-shell
  • mongodb-org-tools

設定ファイルの編集

yumを使ってインストールした場合、/etc/mongodb.confが作成され、これが設定ファイルになります。

# mongod.conf
#where to log
logpath=/var/log/mongodb/mongod.log
logappend=true
# fork and run in background
fork=true
#port=27017
dbpath=/var/lib/mongo
# location of pidfile
pidfilepath=/var/run/mongodb/mongod.pid
# Listen to local interface only. Comment out to listen on all interfaces.
bind_ip=127.0.0.1
# Disables write-ahead journaling
# nojournal=true
# Enables periodic logging of CPU utilization and I/O wait

環境に合わせて最低限編集する必要があるのは、

  • dbpath データの格納先
  • bind_ip バインドするIP
  • port ポート番号

です。

「bind_ip=127.0.0.1」の状態では自マシンからしかアクセスできません
bind_ipに自マシンのIPアドレス、例えば私の環境では「bind_ip=192.168.11.201」を設定すれば、他のマシンからもアクセスできるようになりますが、自マシンからアクセスする場合も「-host」オプションが必要になります。

bind_ipには「,(カンマ)」区切りで複数IPを記述できるので「bind_ip=127.0.0.1,192.168.1.201」と設定すれば、自マシンからは「-host」オプションなし、かつ、他のマシンからもアクセス可能になります。

ファイアウォールが存在する場合は、該当するポート(初期設定:27017)を許可する必要があります。
iptablesでポートを許可する場合、/etc/sysconfig/iptablesに以下の記述を追加します。

-A INPUT -p tcp -m state --state NEW -m tcp --dport 27017 -j ACCEPT

MongoDBは以下のコマンドで起動、停止、再起動ができます。

sudo service mongod start
sudo service mongod stop
sudo service mongod restart

また、インストールした時点で、chkconfigに登録されています。

mongod  0:off  1:off  2:off   3:on  4:off  5:on   6:off

tgzを展開

tgzから展開する場合、まずはMongoDBの構成を検討します。
最低限、以下を決めておく必要があります。

  • データの格納先
  • ログファイル
  • PIDファイル

今回は、ユーザディレクトリの配下に配置します。
また、異なるバージョンをテストできるように、バージョンごとにフォルダを分けておきます。

構成は以下のようにします。

ディレクトリ構成

$HOME/mongo MongoDB
$HOME/mongo/2.6 2.6.x系統
$HOME/mongo/2.6/bin 実行ファイル
$HOME/mongo/2.6/bin/2.6.5 2.6.5の実行ファイル一覧
$HOME/mongo/2.6/bin/default 2.6.5へのシンボリックリンク
$HOME/mongo/2.6/data データ格納先
$HOME/mongo/2.6/logs ログファイル出力先
$HOME/mongo/2.6/pid PIDファイル出力先

$HOMEはユーザのホームディレクトリ、私の環境では「/home/shinro」

ディレクトリ構成図

mongodb_centos_si_tar_dir
※画像をクリックすると、拡大表示されます。

手順

  1. ディレクトリの作成
  2. tgzのダウンロードと展開
  3. 設定ファイルの作成
  4. 起動/停止用シェルスクリプトの作成
  5. 自動起動の設定

ディレクトリの作成

構成に合わせてディレクトリを作成します。

mkdir mongo
mkdir mongo/2.6
mkdir mongo/2.6/bin
mkdir mongo/2.6/bin/2.6.5
mkdir mongo/2.6/data
mkdir mongo/2.6/logs
mkdir mongo/2.6/pid

バージョンを切り替えやすくするために、シンボリックリンクを作成しておきます。

cd mongo/2.6/bin
ln -s 2.6.5 default

tgzのダウンロードと展開

tgzは、MongoDBのWebサイトからmongodb-linux-x86_64-<version>.tgzを取得できます。

ダウンロードと展開する場所はどこでも構いません。今回は$HOMEに展開し、bin配下の実行ファイルをコピーします。

tar -xzvf mongodb-linux-x86_64-2.6.5.tgz
cp mongodb-linux-x86_64-2.6.5/bin/* mongo/2.6/bin/2.6.5/

tgzと展開したファイルが不要なら削除しておきます。

rm mongodb-linux-x86_64-2.6.5.tgz
rm -rf mongodb-linux-x86_64-2.6.5

設定ファイルの作成

MongoDBの設定ファイルはYAMLフォーマットで記述します。今回は$HOMEの直下に作成します。
$HOME/mongodb-2.6.conf

systemLog:
   destination: file
   path: "/home/shinro/mongo/2.6/logs/mongodb.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/home/shinro/mongo/2.6/data"
processManagement:
   fork: true
   pidFilePath: "/home/shinro/mongo/2.6/pid/mongodb.pid"
net:
   bindIp: 127.0.0.1,192.168.11.201
   port: 27018

[systemLog]

  • destination: fileとsyslogが選択可能、fileの場合はpathの設定が必要
  • path: ログファイルの出力先
  • logAppend: ログファイルへの追記

[storage]

  • journal.enabled: trueの場合はjournalが有効
  • dbPath: データの格納先

[processManagement]

  • fork: trueの場合はデーモンモードで動作
  • pidFilePath: PIDファイル出力先

[net]

  • bindIp: バインドするIP、「,(カンマ)」区切りで複数可
  • port: ポート番号

ファイアウォールが存在する場合は、該当するポート(今回は27018)を許可する必要があります。
iptablesでポートを許可する場合、/etc/sysconfig/iptablesに以下の記述を追加します。

-A INPUT -p tcp -m state --state NEW -m tcp --dport 27018 -j ACCEPT

起動/停止用シェルスクリプトの作成

シェルはbash、作成場所は$HOMEを想定しています。
今回は以下のファイルを作成します。

  • mongodb-2.6-start.sh 起動用シェルスクリプト
  • mongodb-2.6-stop.sh 停止用シェルスクリプト
  • mongodb-2.6-restart.sh 再起動用シェルスクリプト

mongodb-2.6-start.sh

#!/bin/bash
cd $(dirname $0)
mongo/2.6/bin/default/mongod -f mongodb-2.6.conf

2行目、カレントディレクトリをスクリプトファイルの位置に移動
3行目、設定ファイルを指定してmongodを起動

mongodb-2.6-stop.sh

#!/bin/bash
set -u
PIDFILE="/home/shinro/mongo/2.6/pid/mongodb.pid"
cd $(dirname $0)
if [ ! -r $PIDFILE ]; then
    echo "Not found["$PIDFILE"]"
else
    while read line; do
        PID=$line
    done < $PIDFILE
    ALIVE=1
    KILL=0
    while [ $ALIVE -eq 1 ]; do
        ALIVE=$(ps -ef | grep "^$USER\s\+$PID\s\+.\+mongodb-2\.6\.conf$" | wc -l)
        if [ $KILL -eq 0 ] && [ $ALIVE -eq 1 ]; then
            kill $PID
            echo "kill "$PID
            KILL=1
        fi
    done
    echo "Stopped"
fi

4行目、カレントディレクトリをスクリプトファイルの位置に移動
8-10行目、PIDファイルからプロセスIDを取得
13-20行目、mongodが終了するまでループ
14行目、自分が起動したmongodの起動確認
15-19行目、mongodが起動していればkill

mongodb-2.6-restart.sh

#!/bin/bash
cd $(dirname $0)
./mongodb-2.6-stop.sh
./mongodb-2.6-start.sh

2行目、カレントディレクトリをスクリプトファイルの位置に移動
3行目、停止用スクリプトファイルを実行
4行目、起動用スクリプトファイルを実行

自動起動の設定

自動起動はcronに登録するのが簡単です。

@reboot $HOME/mongodb-2.6-start.sh

コメントを残す

メールアドレスが公開されることはありません。