goodbyegangsterのブログ

備忘録的な

MongoDBのインストール

MongoDBのインストール手順を確認しました。

環境

  • CentOS 8.1.1911
  • MongoDB Community Edition v4.2.7

事前準備

透過的HugePageの無効化

database系ではよくある話ですが、THPが有効となっていると下記Warning messageが出力されるので無効化しておきます。

2020-06-08T13:44:50.279+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.

2020-06-08T13:44:50.279+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'

公式ドキュメントでも、THPを無効化すべきと言及されています。

database workloads often perform poorly with THP enabled, because they tend to have sparse rather than contiguous memory access patterns. When running MongoDB on Linux, THP should be disabled for best performance.

Disable Transparent Huge Pages (THP)

Systemdにて、boot時に無効化する手順を紹介されていたため、それを実践。THP無効化用のユニットファイルを作成。

/etc/systemd/system/disable-transparent-huge-pages.service

[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'

[Install]
WantedBy=basic.target

設定の有効化。

$ sudo systemctl daemon-reload
$ sudo systemctl enable disable-transparent-huge-pages

Disable Transparent Huge Pages (THP)

MongoDBのインストール

公式手順を参考に。

Install MongoDB Community Edition on Red Hat or CentOS

インストールしたいバージョンを定義したリポジトリファイルを作成します。

/etc/yum.repos.d/mongodb-org-4.2.repo

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

インストール。

$ sudo dnf install -y mongodb-org

自動起動設定の実施。

$ sudo systemctl daemon-reload
$ sudo systemctl enable mongod

認証・認可の設定

アクセスコントール(認証・認可の設定)を設定していない場合、下記Warning messageが出力されるので対応します。

2020-06-08T13:44:50.276+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.

2020-06-08T13:44:50.276+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.

MongoDBのデフォルトは、パスワードベースのチャレンジレスポンス認証を用いたRBAC(Role Base Acccess Contorol)により制御されます。

パスワード認証のことを Salted Challenge Response Authentication Mechanism (SCRAM) て言うんですね。

Salted Challenge Response Authentication Mechanism (SCRAM) is the default authentication mechanism for MongoDB. SCRAM is based on the IETF RFC 5802 standard that defines best practices for implementation of challenge-response mechanisms for authenticating users with passwords.

Using SCRAM, MongoDB verifies the supplied user credentials against the user’s name, password and authentication database. The authentication database is the database where the user was created, and together with the user’s name, serves to identify the user.

SCRAM

下記あたりのマニュアルを参考にしながら設定。

Enable Access Control

root権限ユーザーの作成

最上位権限であるroot権限を所持したユーザーを作成します。

mongo shellよりadminデータベースに接続します。

$ mongo
> use admin
switched to db admin

adminデータベースは、デフォルトで用意されるデータベースの1つです。ユーザー情報は色々なデータベースに格納できるみたいですが、(少なくとも管理系ユーザー情報は)adminデータベースに格納するのが良いみたいです。

For users created in MongoDB, MongoDB stores all user information, including name, password, and the user's authentication database, in the system.users collection in the admin database.

Centralized User Data

root権限を持ったrootユーザーを作成します。

> db.createUser(
...   {
...     user: "root",
...     pwd: "password",
...     roles: [ { role: "root", db: "admin" } ]
...   }
... )
Successfully added user: {
        "user" : "root",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

db.createUser()

root以外の、ビルトイン・ロールたちはこちら。

Built-In Roles

Access Controlモードでプロセス起動設定

Access Controlモードでの起動を有効にします。

コンフィグファイル(デフォルトでは /etc/mongod.conf にあります)の security セクションに、 authorization パラメーターを追加します。

/etc/mongod.conf

...

security:
  authorization: enabled

...

security.authorization

接続してみる

OSを再起動し、mongodbに再接続します。 -u オプションでユーザー名、 -p オプションでパスワード、 --authenticationDatabase オプションでユーザー情報を格納したデータベースを指定します。

$ mongo -u root -p password --authenticationDatabase "admin"
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

warning messageが出力されなくなりました。