MongoDB-logo

MongoDBを使用する際に必要なサーバー環境設定。

Linux

今回はCentOS 6をベースに書きます。
他のOSは適当に読み替えてください。

64bit

64bitのマシンを使用しましょう。
32bitだとできないことが多いです。
  • StorageEngineに WiredTigerが使えない。
  • 2GB 超えるとのデータを扱えない。

ファイルシステム

ext3は非推奨です。使うと死にます。 CentOSの6だとデフォルトext4なので問題ないはず。

ulimit

LinuxにDBインストールするわけですからもちろん必要。
process と ファイルディスクリプタはできればMAXに。
特に, レプリケーションやシャーディング環境の場合は
各コンポーネント間(mongod, mongos, config)の数に比例して
コネクションが増加するので
これをしておかないとTCPのコネクションが枯渇等が発生します。
> sudo vim /etc/security/limits.conf
mongo    soft    nofile    65535
mongo    hard    nofile    65535
mongo    soft    nproc    65535
mongo    hard    nproc    65535
また, CentOS6の場合は以下のファイルが毎回読み込まれる為
プロセス数設定の変更も必要です。
> sudo vim /etc/security/limits.d/90-nproc.conf
# 以下をコメントアウトもしくは値の変更
*   soft    nproc    65535

NUMA

NUMAのアーキテクチャがMongoDBにとっては害しかありません。
MongoDB側でメモリを満遍なく使用するので。

なので, 以下の設定。

> echo 0 > /proc/sys/vm/zone_reclaim_mode

そしてmongod等の起動時にnumactlを付けて起動。

> numactl --interleave=all mongod

Transparent Huge Pages

DBは連続したメモリ領域にメモリアクセスが起こるので
Linux上で運用するときはdisableにしないと
パフォーマンスの低下を招きます。

/etc/grub.conf に下記の設定を追加します。

kernel <kernel path> <kernel options> transparent_hugepage=never

マシン性能について

MongoDBはメモリ上にデータがあれば高速です。
なので出来る限りメモリはたくさん積むべきです。
ディスクIOがボトルネックになるようなら
SSDを大量に積んだマシンも必要になります。
Productionで使用する場合は基本的に高性能な環境が求められます。
3.0 になり, 色々とパフォーマンスが改善されましたが
ある程度のチューニング後は札束で殴らないといけなくなります。

Related Posts