CentOS 6.x
MongoDB 2.4.9 installed via Yum
Individual persistent disks for data, journal, and log
Updated read-ahead values for each disk
Updated ulimit settings
Updated TCP keep-alive settings
MongoDB replicaSet with 1 secondary and 1 Arbiter
1) Ulimit settings
Every deployment may have unique requirements and settings; however, the following thresholds and settings are particularly important for mongod and mongos deployments:
Always remember to restart your mongod and mongos instances after changing the ulimit settings to make sure that the settings change takes effect.
2) Make sure the TZ is set to UTC
$ ls -al /etc/localtime
lrwxrwxrwx 1 root root 23 Mar 14 03:31 /etc/localtime -> /usr/share/zoneinfo/UTC
3) Change default keep-alive time to 300
echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time
4) Disabled overcommit feature in VMWare machines
Overcommitting resources is very bad, particularly memory. This is because VMWare will swap them around guest VMs on the host and your guest VMs will suddenly not have memory available.
5) Adjust the noatime -
noatime - Adding the noatime option eliminates the need for the system to make writes to the file system for files which are simply being read — or in other words: Faster file access and less disk wear.
From <http://blog.softlayer.com/2012/mongodb-architectural-best-practices/>
6) MongoDB preallocates its database files before using them and often creates large files. As such, you should use the Ext4 and XFS file systems
7) Running mongodb as a forked process.
8) Set mongoDB to auto-start on machine start-up
9) Disk - RAID 1+0 ( depending on type of file you want to keep, this may change)
10) Running mongod with separate user ( not root)
Any suggestions/inputs from production deployment experience?