1. ホーム
  2. mongodb

CentOS7に新規インストールしたMongodbの初期設定

2022-02-11 17:28:35
<パス

CentOS 7にMongodbを新規インストールしたときの初期設定

実験環境

Operating system: CentOS Linux release 7.3.1611 (Core)

database system: Mongodb 3.4.9-1.el7

IP: 192.168.230.134

データベースを起動しようとしている

[root@localhost ~]# mongo 
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.4.9
Server has startup warnings: 
2017-09-27T01:58:52.405+0800 I STORAGE [initandlisten] 
2017-09-27T01:58:52.405+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine engine
2017-09-27T01:58:52.405+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] 
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] 
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] 
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] 
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-09-27T01:58:53.255+0800 I CONTROL [initandlisten] 
> 

データベースが4つの警告を報告していることが確認できます。
1. 警告:WiredTigerストレージエンジンでは、XFSファイルシステムの使用を強く推奨します。
2. 警告: データベースに対するアクセス制御が有効になっていません。
3. 警告:/sys/kernel/mm/transparent_hugepage/enabled が 'always' になっています。
4. 警告: /sys/kernel/mm/transparent_hugepage/defrag は 'always' です。

それぞれの修正方法を説明します。

1.警告:WiredTigerストレージエンジンでは、XFSファイルシステムの使用を強く推奨します。

このエラーは、私の仮想環境がEXT4ファイルシステムを使用しているためで、公式には推奨されていませんが

Linux で MongoDB を実行する場合、公式には Linux カーネル バージョン 2.6.36 以降を使用し、XFS または EXT4 ファイルシステムを使用することが推奨されています。XFSはMongoDBでより良いパフォーマンスを発揮するので、可能であればXFSを使うのがベストです。

WiredTigerのストレージエンジンでは、WiredTigerでEXT4を使用した場合に発生する可能性のあるパフォーマンスの問題を避けるため、XFSを使用することを強く推奨します。

MMAPv1ストレージエンジンでは、MongoDBはデータベースファイルを使用する前に事前割り当てを行い、しばしば大きなファイルが作成されます。このため、公式には XFS または EXT4 ファイルシステムを使うことを推奨しています。可能なら XFS を使ってください。MongoDB では通常、XFS のほうがパフォーマンスが高いです。

<ブロッククオート

参考 カーネルとファイルシステム

2. 警告: データベースに対するアクセス制御が有効になっていません。

このエラーは、MongoDBがデータベースアクセス制御を有効にするためにセキュリティライブラリが必要なためです

MongoDB のデプロイメントでアクセス制御を有効にすると、認証が実施され、ユーザーは自分自身を識別することが要求されます。アクセス制御を有効にして MongoDB デプロイメントにアクセスすると、ユーザーは自分の役割によって特定されるアクションのみを実行できます。

  • アクセスコントロールモードなしでmongdbをオンにする
[root@localhost ~]# mongod --dbpath /var/lib/mongo
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] MongoDB starting : pid=2421 port=27017 dbpath=/var/lib/mongo 64-bit host=localhost. localdomain
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] db version v3.4.9
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] allocator: tcmalloc
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] modules: none
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] build environment:
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] distmod: rhel70
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] distarch: x86_64
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] target_arch: x86_64
2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] options: { storage: { dbPath: "/var/lib/mongo" }
2017-09-27T03:06:14.971+0800 I - [initandlisten] Detected data files in /var/lib/mongo created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] 
2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1455M,session_max=20000,eviction=( threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy), file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] 
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] 
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 
2017-09-27T03:06:16.365+0800 I CON

  • インスタンスへの接続
[root@localhost ~]# mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
Server has startup warnings: 
2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] 
2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine engine
2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] 
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] 
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 
> 

  • 管理者データベースに管理者ユーザーを作成します
> use admin
switched to db admin
> db.createUser(
...   {
...     user: "myUserAdmin",
...     pwd: "abc123",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...   }
... )
Successfully added user: {
    "user" : "myUserAdmin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
> exit
bye

  • Mongodbを再起動する

Ctrl+cで元のmongodを終了します。

q^H
^C2017-09-27T03:07:25.685+0800 I CONTROL [signalProcessingThread] got signal 2 (Interrupt), will terminate after current cmd ends
2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] shutdown: going to close listening sockets...
2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] closing listening socket: 6
2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] closing listening socket: 7
2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock
2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] shutdown: going to flush diaglog...
2017-09-27T03:07:25.685+0800 I FTDC [signalProcessingThread] Shutting down full-time diagnostic data capture
2017-09-27T03:07:25.687+0800 I STORAGE [signalProcessingThread] WiredTigerKVEngine shutting down
2017-09-27T03:07:25.770+0800 I STORAGE [signalProcessingThread] shutdown: removing fs lock...
2017-09-27T03:07:25.770+0800 I CONTROL [signalProcessingThread] now exiting
2017-09-27T03:07:25.770+0800 I CONTROL [signalProcessingThread] shutting down with code:0

  • Mongodbを起動するためのアクセス制御を有効にする
[root@localhost ~]# mongod --auth --dbpath /var/lib/mongo
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] MongoDB starting : pid=2508 port=27017 dbpath=/var/lib/mongo 64-bit host=localhost. localdomain
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] db version v3.4.9
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] allocator: tcmalloc
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] modules: none
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] build environment:
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] distmod: rhel70
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] distarch: x86_64
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] target_arch: x86_64
2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] options: { security: { authorization: "enabled" }, storage: { dbPath: "/ var/lib/mongo" } }
2017-09-27T03:07:40.054+0800 I - [initandlisten] Detected data files in /var/lib/mongo created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2017-09-27T03:07:40.054+0800 I STORAGE [initandlisten] 
2017-09-27T03:07:40.054+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-09-27T03:07:40.054+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-09-27T03:07:40.054+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1455M,session_max=20000,eviction=( threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy), file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] 
2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] 
2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'alwa

  • 先ほど作成したユーザー、myUserAdminでデータベースに接続します。
[root@localhost ~]# mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.4.9
>

新しいデータベースtestを作成し、その中にユーザーmyTesterを作成します。

> use test
switched to db test
> db.createUser(
...   {
...     user: "myTester",
...     pwd: "xyz123",
...     roles: [ { role: "readWrite", db: "test" },
...              { role: "read", db: "reporting" } ]
...   }
... )
Successfully added user: {
    "user" : "myTester",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "test"
        },
        {
            "role" : "read",
            "db" : "reporting"
        }
    ]
}
> exit
bye

  • 新しく作成したmyTesterユーザーを使ってデータベースに接続します。
[root@localhost ~]# mongo --port 27017 -u "myTester" -p "xyz123" --authenticationDatabase "test"
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.4.9

参考 認証の有効化

3.WARNING: /sys/kernel/mm/transparent_hugepage/enabled が 'always' になっています。 4.WARNING: /sys/kernel/mm/transparent_hugepage/defrag が 'always' になっています。

この2つの問題は、CentOS 7からTransparent Huge Pages (THP) がデフォルトで有効になっているため、CentOS 7に特有の問題です。
Transparent Huge Pages (THP) はインメモリのパフォーマンスを向上させることを目的としていますが、一部のデータベースベンダーは未だに THP を直接オフにすることを推奨しており (例: Oracle, MariaDB, MongoDB など)、そうしないとパフォーマンスが低下する可能性があります。

  • THPの状態を表示する
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

  • システム構成の変更
[root@localhost ~]# vim /etc/rc.d/rc.local

#! /bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#!
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file.
# In contrast to previous versions due to parallel execution during boot
# This script will NOT be run after all other services.
# Please note that you must run 'udev' during boot.
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
 echo never > /sys/kernel/mm/transparent_hugepage/enabled
 fi
 if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
 echo never > /sys/kernel/mm/transparent_hugepage/defrag
 fi


[root@localhost ~]# chmod +x /etc/rc.d/rc.local

  • 仮想マシンを再起動する
[root@localhost ~]# shutdown -r

  • THPのステータスを再度確認する
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

THPを無効化するように既に変更済み

  • mongodの起動
[root@localhost ~]# mongod --auth --dbpath /var/lib/mongo
2017-09-27T03:40:50.174+0800 I CONTROL [initandlisten] MongoDB starting : pid=2381 port=27017 dbpath=/var/lib/mongo 64-bit host=localhost. localdomain
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] db version v3.4.9
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] allocator: tcmalloc
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] modules: none
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] build environment:
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] distmod: rhel70
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] distarch: x86_64
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] target_arch: x86_64
2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] options: { security: { authorization: "enabled" }, storage: { dbPath: "/ var/lib/mongo" } }
2017-09-27T03:40:50.195+0800 I - [initandlisten] Detected data files in /var/lib/mongo created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2017-09-27T03:40:50.195+0800 I STORAGE [initandlisten] 
2017-09-27T03:40:50.195+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-09-27T03:40:50.195+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-09-27T03:40:50.195+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1455M,session_max=20000,eviction=( threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy), file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2017-09-27T03:40:50.689+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-09-27T03:40:50.689+0800 I CONTROL [initandlisten] 
2017-09-27T03:40:50.692+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongo/diagnostic.

  • データベースを入力します。
[root@localhost ~]# mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
> 

データベースのデフォルトipを変更する

インストール後のmongodbのデフォルトの接続IPは127.0.0.1ですが、リモート接続する場合はここでローカルIPに変更します。

[root@localhost ~]# vim /etc/mongod.conf

# network interfaces
net:
  port: 27017
  bindIp: 192.168.230.134 # Listen to local interface only, comment to listen on all interfaces.

ipを192.168.230.134に設定、ポートはデフォルトの27017のまま

データベースのデータファイルのディレクトリを変更する

まだ mongod.conf ファイルで、次のように変更します。

[root@localhost ~]# vim /etc/mongod.conf

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

デフォルトのデータファイルのパスは /var/lib/mongo で、ここでは変更していませんが、必要であれば独自のデータファイルのパスを作成できます

mongodサービスを再起動します。

[root@localhost ~]# systemctl restart mongod.service