MongoDB Enterprise Advancedをインストールする

こんにちは、菊池です。

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 Advanced

インストール手順

それでは、MongoDB Enterpriseをインストールしていきます。各プラットフォームに合わせた手順が、公式ドキュメントで参照できます。

Install 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独自の機能についても紹介していきます。