この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、菊池です。
MongoDBには、商用ライセンスであるMongoDB Enterprise Advancedがあります。今回、Enterprise Advancedを利用する機会がありましたので、商用版のみに提供される機能を、何回かに分けて紹介します。本エントリでは、最初のステップであるインストールの手順を紹介します。
MongoDB Enterprise Advanced
MongoDB Enterprise Advancedでは、コミュニティ版にはない以下のような機能・サービスが提供されます。
- Advanced Security
- LDAP/Kerberos認証
- 監査
- 暗号化ストレージ
- Management
- Ops Manager
- SNMPサポート
- In-Memory Speed
- In-Memory ストレージエンジン
- Intuitive GUI
- MongoDB Compass
- Advanced Analytics
- MongoDB Connector for BI
- Proactive Support
- 24時間365日のサポート
- 緊急パッチの提供
- オンデマンドトレーニング
各機能・サービスの詳細は公式ドキュメントを参照ください。今後のエントリでも各機能を紹介していきたいと思います。
インストール手順
それでは、MongoDB Enterpriseをインストールしていきます。各プラットフォームに合わせた手順が、公式ドキュメントで参照できます。
今回はCentOS7にインストールしてみました。
リポジトリファイルの作成
MongoDB Enterpriseはyumでインストールが可能です。/etc/yum.repos.d/mongodb-enterprise.repo
にリポジトリファイルを作成します。
[mongodb-enterprise]
name=MongoDB Enterprise Repository
baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/3.4/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
インストールと接続
続いてインストールです。MongoDB Enterpriseには以下のパッケージが存在します。
- mongodb-enterprise:以下の全てのパッケージが含まれます
- mongodb-enterprise-server:MongoDBのサーバであるmongodデーモン
- mongodb-enterprise-mongos:シャーディング時に必要となるルータ
- mongodb-enterprise-shell:MongoDBのシェル
- mongodb-enterprise-tools:ダンプ、エクスポート/インポート、ステータスの取得などを行う各種運用ツール
mongodb-enterpriseをインストールすれば、全てのパッケージがインストールされます。
$ sudo yum install -y mongodb-enterprise
必要なパッケージのみでよい場合には、個別にインストールしましょう。
$ sudo yum install -y mongodb-enterprise-server mongodb-enterprise-shell mongodb-enterprise-tools
インストールができたらmongodを起動します。
$ sudo systemctl start mongod
mongoシェルで接続してみましょう。
$ mongo
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten]
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten]
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten]
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten]
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-07-20T10:05:04.939+0900 I CONTROL [initandlisten]
MongoDB Enterprise >
接続できました。いくつか警告メッセージが出ていますので、次の手順で対応します。
Transparent Huge Pagesの無効化
Transparent Huge Pages(THP)はLinuxのメモリ管理の仕組みで、大容量のメモリに対しTranslation Lookaside Buffer(TLB)ルックアップのオーバーヘッドを削減する効果があります。しかし、DBのような不連続なメモリアクセスパターンではTHPによりパーフォーマンスが低下することもあるため、MongoDBでは無効化することが推奨されています。
Disable Transparent Huge Pages (THP)
上記リンクの手順にしたがって、THPを無効化します。
起動時にTHPを無効化するスクリプトを/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
# 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' > ${thp_path}/enabled
echo 'never' > ${thp_path}/defrag
re='^[0-1]+$'
if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]]
then
# RHEL 7
echo 0 > ${thp_path}/khugepaged/defrag
else
# RHEL 6
echo 'no' > ${thp_path}/khugepaged/defrag
fi
unset re
unset thp_path
;;
esac
実行権限をつけ、起動時の実行を有効化します。
$ sudo chkconfig --add disable-transparent-hugepages
$ sudo reboot
OSをリブート後、以下の2つでいずれもnever
が選択されていればOKです。
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
mongoシェルで接続します。
$ mongo
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
Server has startup warnings:
2017-07-20T10:23:20.117+0900 I CONTROL [initandlisten]
2017-07-20T10:23:20.117+0900 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-07-20T10:23:20.117+0900 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-07-20T10:23:20.117+0900 I CONTROL [initandlisten]
MongoDB Enterprise >
THPの警告が出なくなりました。Access controlについては今後の設定の中で解消していきたいと思います。
まとめ
MongoDBの商用プロダクト、MongoDB Enterprise Advancedの導入ということで、まずはインストールから起動、接続の手順を紹介しました。
商用版でも、リポジトリ/バイナリが異なるだけで、基本的にはコミュニティ版と同様の手順で導入が可能です。今後、Enterprise Advanced独自の機能についても紹介していきます。