CentOS
MongoDB
centos7

CentOS7にMongoDBをインストール〜MongoDB起動〜mongoShell起動

CentOS7、64bit環境にMongoDB(3.4系)を入れてみます。簡単でした。

$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
$ arch
x86_64

インストールマニュアルを参考にしました。

yumの設定

いきなりyum install mo...といきたいところですが、その前に設定ファイルの作成が必要です。ファイルを作成して

$ sudo vi /etc/yum.repos.d/mongodb-org-3.4.repo

以下の内容をそのまま保存します。CentOSでは/etc/yum.repos.d/ディレクトリに.repoファイルを作成することによって、yumのリポジトリが追加できるそうです。ドキュメントを見た感じですが、AmazonLinuxの場合だとこの.repoファイルの内容がちょっと違うだけであとはほとんどこの記事の内容が使えそうです。

mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

インストールコマンドを叩く

$ sudo yum install -y mongodb-org
...
依存性関連をインストールしました:
    mongodb-org-mongos.x86_64 0:3.4.10-1.el7  mongodb-org-server.x86_64 0:3.4.10-1.el7 
    mongodb-org-shell.x86_64 0:3.4.10-1.el7   mongodb-org-tools.x86_64 0:3.4.10-1.el7  

完了しました!

SELinuxの設定

ほとんどのUNIX系OSではセッションが利用するシステムリソースを制限しており、これがMongoDBのオペレーションに影響する場合があります。SELinuxを有効化しながらMongoDBが利用するポートに対して許可をするか、SELinuxを無効化する設定が必要になるようです。Vagrant+VirtualBoxで立ち上げた直後のCentOS7の場合、SELinuxのステータスはpermissiveでした。そのため、このSELinuxの設定は試していません。

$ getenforce
Permissive
$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

permissiveまたはdisabledであれば特に何もする必要はないようですが、enforcingである場合はpermissivedisabledのどちらかにステータスを変更する、またはMongoDBが利用するポート(デフォルトであれば27017番)に対してアクセスを許可する必要があるようです。いずれかを実行した場合は変更を反映させるためにシステムの再起動が必要です。

# disabledにステータス変更する場合
$ SELINUX=disabled
# permissiveにステータス変更する場合
$ SELINUX=permissive
# 27017番ポートにアクセス許可する場合
$ semanage port -a -t mongod_port_t -p tcp 27017

MongoDBの起動

mongodプロセスを起動します。mongodとは
CentOS7だとsystemctlコマンドにリダイレクトされて実行されるのでsystemctlコマンドでもOKです。参考

$ sudo service mongod start
または
$ sudo systemctl start mongod.service

MongoDBが正常に起動したか確認してみましょう。/var/log/mongodb/mongod.logの中をチェックします。

$ sudo cat /var/log/mongodb/mongod.log

いろいろ出てくると思いますが、waiting for connections on port 27017のようなログがあればOKです。
システムが再起動するたびにMongoDBを起動するためには、

$ sudo chkconfig mongod on
または
$ sudo systemctl enable mongod.service

を実行します。(オプションなのでやらなくてもOKです。)

MongoDBの停止・再起動

停止コマンド

$ sudo service stop mongod
または
$ sudo systemctl stop mongod.service

再起動コマンド

$ sudo service restart mongod
または
$ sudo systemctl restart mongod.service

mongo Shellの起動

公式ドキュメント

普通にインストールすればパスが通っているはずなので、mongoコマンドでmongoShellが起動できます。

$ which mongo
/usr/bin/mongo
$ mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.10
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings: 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
> 

なんかWARNINGが出ていますがとりあえず起動できました。終了してみます。

> exit
bye
$

できました。次は基本的なDB操作とNode.jsからMongoDBを使うというのをやってみたいと思います。