MongoDB使用時の必要なサーバ環境設定

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 になり, 色々とパフォーマンスが改善されましたが
ある程度のチューニング後は札束で殴らないといけなくなります。