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.
下記あたりのマニュアルを参考にしながら設定。
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.
root権限を持ったrootユーザーを作成します。
> db.createUser( ... { ... user: "root", ... pwd: "password", ... roles: [ { role: "root", db: "admin" } ] ... } ... ) Successfully added user: { "user" : "root", "roles" : [ { "role" : "root", "db" : "admin" } ] }
root以外の、ビルトイン・ロールたちはこちら。
Access Controlモードでプロセス起動設定
Access Controlモードでの起動を有効にします。
コンフィグファイル(デフォルトでは /etc/mongod.conf
にあります)の security
セクションに、 authorization
パラメーターを追加します。
/etc/mongod.conf
... security: authorization: enabled ...
接続してみる
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が出力されなくなりました。