CentOS7に新規インストールしたMongodbの初期設定
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
関連
-
[解決済み】SocketException: アドレスはすでに使用中です。
-
[解決済み】MongoDBデータベースの名前を変更する方法とは?
-
[解決済み] コマンド1つでmongo DBを停止する方法
-
[解決済み] mongo - サーバー 127.0.0.1:27017 に接続できませんでした。
-
[解決済み] mongodb シェルでドキュメントの値を印刷する
-
[解決済み] ストア enum MongoDB
-
[解決済み] HomebrewでMongoDBをインストールする
-
[解決済み] 同じデータベース内でコレクションをコピーする最も速い方法は何ですか?
-
[解決済み] mongoDB の文字列フィールドの値の長さ
-
[解決済み] 配列フィールドが空でない MongoDB レコードを検索する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み] MongoDB - 管理者ユーザが認証されていない
-
[解決済み] MongoDB - シンプルなサブクエリの例
-
[解決済み] mongoimport : 'error validating settings: positional argument is only one allowed' (設定の検証エラー:位置引数は1つしか許可されません。
-
[解決済み] MongoDBでコレクションを削除するには?
-
[解決済み] 条件付きでMongoDBを更新する
-
[解決済み] MongoDB: 大文字小文字を区別しないクエリを作ることはできますか?
-
[解決済み] MongoDBと同等ではない
-
[解決済み] mongodb aggregation sort
-
undefinedエラー: getaddrinfo ENOTFOUND localhost または MongoDB connected disconnected