MongoDBをtarからインストールしてCentOS 7のsystemdで起動/停止する設定
CentOS 7では、これまでのSysVinitからsystemdが使われるようになりました。 MongoDBもyumやrpmでインストールするとsystemdで管理できるようになるみたいです。 ただ、yumに上がっていないリリース直後のMongoDBをtarからインストールしたい場合、自分で設定する必要があります。ちょうどCentOS 7に最新のMongoDBを環境構築する機会があったので、作業メモとして残します。
一番手っ取り早いのは、yumなりrpmなりでMongoDBをインストールした後、インストールされた/usr/binディレクトリにあるバイナリを差し替えることです。ただし、そうするとyumで管理しているバージョンと差異が出るので注意しないといけません。
今回はyumでのインストールを行わずに、MongoDBのtar + Githubリポジトリにあるrpm用の設定ファイルを使ってsystemdでの起動設定を行います。作業はすべてrootユーザーで行いました。
環境
手順
1. MongoDB 3.1.5のインストール
Downloads - MongoDB から最新のMongoDBをtgz形式でダウンロードします。今回は、RHEL 7 Linux64-bitです。
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.1.5.tgz
設定ファイルはMongoDBのgithubにひな形があるので、ダウンロードして使います。
https://github.com/mongodb/mongo/blob/master/rpm/mongod.conf
他にもgithubのrpmディレクトリにはsystemdで管理する際に必要となるファイルがありますので、後ほど使います。
まずは、rootユーザーでMongoDBが手動で起動するところまで進めます。
cd /opt wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.1.5.tgz tar zxfv mongodb-linux-x86_64-rhel70-3.1.5.tgz ln -s /opt/mongodb-linux-x86_64-rhel70-3.1.5/ /opt/mongodb wget https://raw.githubusercontent.com/mongodb/mongo/master/rpm/mongod.conf mv mongod.conf /etc/mongod.conf mkdir /var/log/mongodb mkdir /var/lib/mongo mkdir /var/run/mongodb
準備できました。起動の確認を行います。
[root@xxxx ~]# /opt/mongodb/bin/mongod -f /etc/mongod.conf about to fork child process, waiting until server is ready for connections. forked process: 6637 child process started successfully, parent exiting
起動しない場合は、/var/log/mongodb/mongod.log
を確認しましょう。
mongoシェルから接続を確認します。
[root@xxxx ~]# /opt/mongodb/bin/mongo MongoDB shell version: 3.1.5 connecting to: test Server has startup warnings: 2015-07-13T15:46:30.961+0900 I CONTROL [initandlisten] 2015-07-13T15:46:30.961+0900 I CONTROL [initandlisten] ** NOTE: This is a development version (3.1.5) of MongoDB. 2015-07-13T15:46:30.961+0900 I CONTROL [initandlisten] ** Not recommended for production. 2015-07-13T15:46:30.961+0900 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 2015-07-13T15:46:30.961+0900 I CONTROL [initandlisten] >
WARNINGがいくつか出ると思いますが、今回の記事では気にしないこととします。 接続できたことが確認できたら成功です。
次の手順でsystemdによる起動を行うので、いま起動させたmongodプロセスは停止させましょう。 mongod.lockファイルの削除も忘れずに。
kill `cat /var/run/mongodb/mongod.pid` rm /var/lib/mongo/mongod.lock
2. systemdによる起動設定
ここから本題のsystemdによる設定に入ります。まずはmongodグループとmongodユーザーを作成します。コマンドはgithubにあるrpm用のspecファイルを参考にしています。
https://github.com/mongodb/mongo/blob/master/rpm/mongodb-org.spec
/usr/sbin/groupadd -r mongod /usr/sbin/useradd -M -r -g mongod -d /var/lib/mongo -s /bin/false -c mongod mongod
関連するディレクトリの所有者をmongodに変更します。
chown -R mongod:mongod /opt/mongodb chown -R mongod:mongod /var/log/mongodb chown -R mongod:mongod /var/lib/mongo chown -R mongod:mongod /var/run/mongodb
systemdのserviceファイルをgithubからダウンロードして配置します。
wget https://raw.githubusercontent.com/mongodb/mongo/master/rpm/mongod.service mv mongod.service /usr/lib/systemd/system ln -s /usr/lib/systemd/system/mongod.service /etc/systemd/system/multi-user.target.wants/
daemon-reloadの後、起動させます。
systemctl daemon-reload systemctl start mongod.service
systemctl statusで起動を確認しましょう。
[root@xxx ~]# systemctl status mongod.service mongod.service - High-performance, schema-free document-oriented database Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled) Active: active (running) since Mon 2015-07-13 16:16:04 JST; 5s ago Main PID: 6774 (mongod) CGroup: /system.slice/mongod.service └─6774 /opt/mongodb/bin/mongod --quiet -f /etc/mongod.conf run Jul 13 16:16:04 xxx systemd[1]: Starting High-performance, schema-free d..... Jul 13 16:16:04 xxx systemd[1]: Started High-performance, schema-free do...e. Jul 13 16:16:04 xxx mongod[6772]: about to fork child process, waiting u...s. Jul 13 16:16:04 xxx mongod[6772]: forked process: 6774 Jul 13 16:16:04 xxx mongod[6772]: child process started successfully, pa...ng Hint: Some lines were ellipsized, use -l to show in full.
Activeがactive (running) となっていたら成功です。お疲れさまでした!
停止コマンド
systemctl stop mongod.service
3. OS再起動時に/var/run/mongodbを作成する設定
CentOS 7は/var/run はtmpfsとなっているので、OS再起動時に削除されます。 /etc/tmpfiles.d/mongod.confを作成して再起動後もディレクトリが作成されるようにしましょう。
echo "D /var/run/mongodb 0755 mongod mongod -" > /etc/tmpfiles.d/mongod.conf