Carpe Diem

備忘録。https://github.com/jun06t

MongoDB 3.0 をインストール

概要

3.0がリリースされたのでインストール方法をメモ。
Warningを消すのがちょっと面倒です。

環境

インストール

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

Warningを消す

コンソールでアクセスすると以下のWarningが出ます。

$ mongo
MongoDB shell version: 3.0.0
connecting to: test
Server has startup warnings:
2015-03-12T01:03:29.659+0000 I CONTROL [initandlisten]
2015-03-12T01:03:29.659+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-03-12T01:03:29.659+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-03-12T01:03:29.659+0000 I CONTROL [initandlisten]
2015-03-12T01:03:29.659+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-12T01:03:29.659+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-03-12T01:03:29.659+0000 I CONTROL [initandlisten]

解決法をネットで調べると以下の4通りのどれかがヒットします。

方法 問題点
grubで設定する /etc/default/grubでなく/boot/grub/grub.cfgを直接編集しないと動かず。
設定しても最初のやつだけしか消えず
hugeadmで設定する うまく動かず
rc.localで設定する マシンを再起動後、mongodをもう一度再起動する必要性あり
upstartで設定する mongoがアップデートしたら設定も上書きされて消えるかも

まともに動いたのが後ろ2つなのでそれらの方法を紹介します。

rc.localで設定する

以下を/etc/rc.localに追記

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

マシンを再起動して、さらにmongodを再起動します。

$ sudo service mongod restart

この理由としてはmongodの起動の方はUpstartのためrc.localより早く、mongod起動時にはまだ設定がalwaysのままなんです。
なのでマシンを再起動したりするとまたWarningが出てきます。

MongoのUpstartを修正する

/etc/init/mongod.confを編集します。pre-start scriptの部分に以下を追記します。

  if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  fi
  if [ -f /sys/kernel/mm/transparent_hugepage/defrag ]; then
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
  fi

サービスを再起動するとWarningが消えるようになります。

$ sudo service mongod restart

まとめ

まだこのWarningを消すベストプラクティスはなさげです。TokuMXみたいにデフォルトでupstartのconfについてるといいのですが。

ソース