1. ホーム
  2. MongoDB

MongoDBデータベースのインストールとデプロイメント、および警告の最適化

2022-02-11 05:19:23
<パス

MongoDB インストールの展開と警告の最適化

1. ソフトウェアダウンロード

バージョン3.6.13: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.13.tgz

バージョン4.0.14: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.14.tgz

公式ドキュメント: https://docs.mongodb.com/manual/

2. MongoDBのデプロイ

2.1. デプロイメントディレクトリの計画

Program directory
[root@mongodb-1 ~]# mkdir /data/mongodb_cluster/mongodb_27017/{conf,data,logs,pid} -p

Software directory
[root@mongodb-1 ~]# mkdir /data/soft

[root@mongodb-1 ~]# tree /data/
/data/
├── mongodb_cluster
│ └── mongodb_27017
│ ├── conf
│ ├── data
│ ├── logs
│ └── pid
└─ soft

7 directories, 0 files

[root@mongodb-1 ~]# cd /data/soft/
[root@mongodb-1 /data/soft]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.14.tgz


2.2. パッケージのダウンロード

1. Unpack MongoDB
[root@mongodb-1 /data/soft]# tar xf mongodb-linux-x86_64-4.0.14.tgz -C /data/mongodb_cluster/

2. Make a soft connection
[root@mongodb-1 /data/soft]# cd /data/mongodb_cluster/
[root@mongodb-1 /data/mongodb_cluster]# ln -s mongodb-linux-x86_64-4.0.14/ mongodb

3. Create the MongoDB configuration file directory
[root@mongodb-1 ~]# mkdir /data/mongodb_cluster/mongodb_27017/{conf,data,logs,pid} -p
[root@mongodb-1 ~]# tree /data/ -d
/data/
├── mongodb_cluster
│ ├── mongodb -> mongodb-linux-x86_64-4.0.14/
│ ├── mongodb_27017
│ │ ├── conf
│ │ ├── data
│ │ ├── logs
│ │ ├── pid
│ └── mongodb-linux-x86_64-4.0.14
│ └── bin
└── soft

Configuration file annotations.
systemLog:
  destination: file //Mongodb log output as a file
  logAppend: true //no new log file is created when the instance is restarted, the logs are added at the end of the old log file
  path: /data/mongodb_cluster/mongodb_27017/logs/mongodb.log //log path

storage:
  journal: //rollback log, similar to mysql's binlog
    enabled: true //Enable rollback logging
  dbPath: /data/mongodb_cluster/mongodb_27017/data //data storage directory
  directoryPerDB: true //default, false does not apply to inmemoryengine
  wiredTiger: //storage engine
    engineConfig:
      cacheSizeGB: 1 //will be used for all data cache size
      directoryForIndexes: true //default false index collection storage.dbPath stored in a separate subdirectory of data, here must be configured to true, otherwise all library data files will be stored in a directory
    collectionConfig:
      blockCompressor: zlib //enable compression
    indexConfig:	
      prefixCompression: true //enable indexing

processManagement: //System daemon control processing
  fork: true //runs in the background
  pidFilePath: /data/mongodb_cluster/mongodb_27017/pid/mongod.pid //pid file path

net:
  port: 27017 //listening port
  bindIp: 127.0.0.1,192.168.81.210 //bind ip

[root@mongodb-1 ~]# cd /data/mongodb_cluster/mongodb_27017/
[root@mongodb-1 /data/mongodb_cluster/mongodb_27017]# vim conf/mongodb.yml
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb_cluster/mongodb_27017/logs/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/mongodb_cluster/mongodb_27017/data
  directoryPerDB: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /data/mongodb_cluster/mongodb_27017/pid/mongod.pid

net:
  port: 27017
  bindIp: 127.0.0.1,192.168.81.210

1. Start MongoDB
[root@mongodb-1 ~]# cd /data/mongodb_cluster
[root@mongodb-1 /data/mongodb_cluster]# . /mongodb/bin/mongod -f mongodb_27017/conf/mongodb.yml 
about to fork child process, waiting until server is ready for connections.
forked process: 73550
child process started successfully, parent exiting

2. Check the processes and ports
[root@mongodb-1 /data/mongodb_cluster]# ps aux | grep mongo
[root@mongodb-1 /data/mongodb_cluster]# netstat -lnpt | grep mongo


2.3. MongoDBのインストール

MongoDBはダウンロード後、直接解凍して使用することができ、設定ファイルは含まれていませんので、自分で作成する必要があります

1. Command line shutdown of MongoDB
[root@mongodb-1 ~]# cd /data/mongodb_cluster
[root@mongodb-1 /data/mongodb_cluster]# . /mongodb/bin/mongod -f mongodb_27017/conf/mongodb.yml --shutdown
killing process with pid: 73550

2. Shutdown MongoDB interactively
[mongo@mongodb-1 ~]$mongo
> use admin
switched to db admin
> db.shutdownServer()

View processes and ports
[root@mongodb-1 /data/mongodb_cluster]# ps aux | grep mongo
[root@mongodb-1 /data/mongodb_cluster]# netstat -lnpt | grep mongo



2.4. MongoDB設定ファイル入門

1. Start MongoDB
[root@mongodb-1 ~]# cd /data/mongodb_cluster
[root@mongodb-1 /data/mongodb_cluster]# . /mongodb/bin/mongod -f mongodb_27017/conf/mongodb.yml 

2. Login to MongoDB
[root@mongodb-1 /data/mongodb_cluster]# . /mongodb/bin/mongo


2.5. MongoDB設定ファイルの書き方

2021-02-13T10:44:47.832+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2.6. MongoDBの起動

1. Shutting down MongoDB
[root@mongodb-1 /data/mongodb_cluster]# . /mongodb/bin/mongod -f mongodb_27017/conf/mongodb.yml --shutdown

2. Create user
[root@mongodb-1 ~]# useradd mongo
[root@mongodb-1 ~]# echo "123456" | passwd --stdin mongo

3. Empowerment
[root@mongodb-1 ~]# chown -R mongo.mongo /data/mongodb_cluster/

4. Login to the normal user and configure the environment variables
[root@mongodb-1 ~]# su - mongo
[mongo@mongodb-1 ~]$ vim .bashrc
export PATH=/data/mongodb_cluster/mongodb/bin/:$PATH
[mongo@mongodb-1 ~]$ source .bashrc

5. Start MongoDB
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml 
about to fork child process, waiting until server is ready for connections.
forked process: 73835
child process started successfully, parent exiting

6. Login to MongoDB
[mongo@mongodb-1 ~]$ mongo



<イグ

2.7. MongoDBを終了する方法

MongoDBを直接シャットダウンするには、startコマンドの後に-shutdownを付けます。

MongoDBをシャットダウンする2つの方法

** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
 
** We suggest setting it to 'never'
 
** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
 
** We suggest setting it to 'never'

2.8. MongoDBへのログイン

MongoDB にログインするには mongo コマンドが必要です。

1. Prepare the init script
[root@mongodb-1 ~]# vim /etc/init.d/disable-transparent-hugepages
#! /bin/bash
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description: Disable Linux transparent huge pages, to improve
# ### END INIT INFO: Disable Linux transparent huge pages, to improve database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' | tee ${thp_path}/enabled > /dev/null

    unset thp_path
    ;;
esac

2. Empower and add as bootable
[root@mongodb-1 ~]# chmod 755 /etc/init.d/disable-transparent-hugepages
[root@mongodb-1 ~]# chkconfig --add disable-transparent-hugepages
[root@mongodb-1 ~]# chkconfig --list | grep disa

3. Restart MongoDB
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml 

4. Login to mongdo to see the warnings
[mongo@mongodb-1 ~]$ mongo

1. Temporarily shutting down in-memory pages
[root@mongodb-1 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[root@mongodb-1 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
[root@mongodb-1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled 
always madvise [never]
[root@mongodb-1 ~]# cat /sys/kernel/mm/transparent_hugepage/defrag 
always madvise [never]

2. Restart MongoDB
[root@mongodb-1 ~]# su - mongo
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml

3. Login to MongoDB to view alerts
[mongo@mongodb-1 ~]$ mongo


ログイン後、いくつかの警告メッセージが表示されますが、これを 3 で最適化します。

3. MongoDB の警告メッセージの最適化

3.1. 起動時のユーザー警告の最適化

警告の内容 ** WARNING: soft rlimits too low. rlimits set to 15324 processes, 65535 files. number of processes should be at least 32767.5: 0.5 times number of files.

この警告は、rootで直接起動しないようにするための注意喚起であり、通常のユーザーで起動する必要があります。

アイデア 通常ユーザーを作成し、MongoDBの配置ディレクトリを通常ユーザーに割り当て、通常ユーザーで起動する。

1. adjust the limit (this method is effective without rebooting the machine)
cat > /etc/profile<<EOF
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 64000
ulimit -m unlimited
ulimit -u 64000
EOF

source /etc/profile

2. Restart MongoDB
[root@mongodb-1 ~]# su - mongo
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml




起動ユーザーに対する警告メッセージが消えているのがわかると思います

3.2. 大きなメモリページの警告を最適化する

警告の内容

** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.


** We suggest setting it to 'never'


** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.


** We suggest setting it to 'never'

これは、ラージメモリの設定が常に、MongoDBは決して使用しないことを推奨しているためです。

3.2.1. 大きなメモリページの永続的なクローズ

公式ドキュメント:https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/

1. Prepare the init script
[root@mongodb-1 ~]# vim /etc/init.d/disable-transparent-hugepages
#! /bin/bash
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description: Disable Linux transparent huge pages, to improve
# ### END INIT INFO: Disable Linux transparent huge pages, to improve database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' | tee ${thp_path}/enabled > /dev/null

    unset thp_path
    ;;
esac

2. Empower and add as bootable
[root@mongodb-1 ~]# chmod 755 /etc/init.d/disable-transparent-hugepages
[root@mongodb-1 ~]# chkconfig --add disable-transparent-hugepages
[root@mongodb-1 ~]# chkconfig --list | grep disa


<イグ

3. Restart MongoDB
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml 

4. Login to mongdo to see the warnings
[mongo@mongodb-1 ~]$ mongo


3.2.2. 大きなメモリページを一時的に閉じる

1. Temporarily shutting down in-memory pages
[root@mongodb-1 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[root@mongodb-1 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
[root@mongodb-1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled 
always madvise [never]
[root@mongodb-1 ~]# cat /sys/kernel/mm/transparent_hugepage/defrag 
always madvise [never]

2. Restart MongoDB
[root@mongodb-1 ~]# su - mongo
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml

3. Login to MongoDB to view alerts
[mongo@mongodb-1 ~]$ mongo


メモリページが大きいという警告が解決されたことがわかります。

3.3. 制限警告の最適化

警告の内容 ** WARNING: soft rlimits too low. rlimits set to 15324 processes, 65535 files. number of processes should be at least 32767.5: 0.5 times number of files.

ヒントは、limtで設定したオープンファイルの数が少なすぎることです

1. adjust the limit (this method is effective without rebooting the machine)
cat > /etc/profile<<EOF
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 64000
ulimit -m unlimited
ulimit -u 64000
EOF

source /etc/profile

2. Restart MongoDB
[root@mongodb-1 ~]# su - mongo
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml