The following checklist, along with the Development Checklist list, provides recommendations to help you avoid issues in your production MongoDB deployment.
Filesystem
Align your disk partitions with your RAID configuration.
Avoid using NFS drives for your
dbPath. Using NFS drives can result in degraded and unstable performance. See: Remote Filesystems (NFS) for more information.VMware users should use VMware virtual drives over NFS.
Linux/Unix: format your drives into XFS or EXT4. If possible, use XFS as it generally performs better with MongoDB.
With the WiredTiger storage engine, use of XFS is strongly recommended to avoid performance issues found when using EXT4 with WiredTiger.
If using RAID, you may need to configure XFS with your RAID geometry.
Windows: use the NTFS file system. Do not use any FAT file system (i.e. FAT 16/32/exFAT).
Replication
Verify that all non-hidden replica set members are identically provisioned in terms of their RAM, CPU, disk, network setup, etc.
Configure the oplog size to suit your use case:
The replication oplog window should cover normal maintenance and downtime windows to avoid the need for a full resync.
The replication oplog window should cover the time needed to restore a replica set member from the last backup.
Note
The replication oplog window doesn't need to cover the time needed to restore a replica set member via initial sync as the oplog records are pulled during the data copy. However, the member being restored must have enough disk space in the local database to temporarily store these oplog records for the duration of this data copy stage.
Ensure that your replica set includes at least three data-bearing voting members that run with journaling and that you issue writes with
w: majoritywrite concern for availability and durability.Use hostnames when configuring replica set members, rather than IP addresses.
Ensure full bidirectional network connectivity between all
mongodinstances.Ensure that each host can resolve itself.
Ensure that your replica set contains an odd number of voting members.
Ensure that
mongodinstances have0or1votes.For high availability, deploy your replica set into a minimum of three data centers.
Sharding
Place your config servers on dedicated hardware for optimal performance in large clusters. Ensure that the hardware has enough RAM to hold the data files entirely in memory and that it has dedicated storage.
Deploy
mongosrouters in accordance with the Production Configuration guidelines.Use NTP to synchronize the clocks on all components of your sharded cluster.
Ensure full bidirectional network connectivity between
mongod,mongos, and config servers.Use CNAMEs to identify your config servers to the cluster so that you can rename and renumber your config servers without downtime.
Journaling: WiredTiger Storage Engine
Ensure that all instances use journaling.
Place the journal on its own low-latency disk for write-intensive workloads. Note that this will affect snapshot-style backups as the files constituting the state of the database will reside on separate volumes.
Hardware
Use RAID10 and SSD drives for optimal performance.
SAN and Virtualization:
Deployments to Cloud Hardware
Windows Azure: Adjust the TCP keepalive (
tcp_keepalive_time) to 100-120. The TCP idle timeout on the Azure load balancer is too slow for MongoDB's connection pooling behavior. See: Azure Production Notes for more information.Use MongoDB version 2.6.4 or later on systems with high-latency storage, such as Windows Azure, as these versions include performance improvements for those systems.
Operating System Configuration
Linux
If running MongoDB 8.0 or later, turn on Transparent Hugepages.
If running MongoDB 7.0 or earlier, turn off Transparent Hugepages.
Adjust the readahead settings on the devices storing your database files.
For the WiredTiger storage engine, set readahead between 8 and 32 regardless of storage media type (spinning disk, SSD, etc.), unless testing shows a measurable, repeatable, and reliable benefit in a higher readahead value.
MongoDB commercial support can provide advice and guidance on alternate readahead configurations.
If using
tunedon RHEL / CentOS, you must customize yourtunedprofile. Many of thetunedprofiles that ship with RHEL / CentOS can negatively impact performance with their default settings. Customize your chosentunedprofile to:Enable or disable Transparent Hugepages, depending on your MongoDB version.
If you are using MongoDB 8.0 or later, see using tuned and ktune to enable THP.
If you are using MongoDB 7.0 or earlier, see using tuned and ktune to disable THP.
Set readahead between 8 and 32 regardless of storage media type. See Readahead settings for more information.
Use the
nonedisk schedulers for NVMe or SSD drives.Use the
nonedisk scheduler for virtualized drives in guest VMs. If there are no neighbors, or if the neighbors do not produce heavy I/O patterns, there will be little HBA contention and the defaultnonescheduler suffices.Use
kyberto run multiple workloads in the same VM or in your own data center.kyberimproves the I/O interpolation under contention, and reduces the impact of noisy neighbors. Additionally,kyberworks efficiently in self hosted situations, such as on-premises virtualization and collocated workloads in one large cloud VM. However,kyberis only available on linux kernels starting in version 4.12.Disable NUMA or set vm.zone_reclaim_mode to 0 and run
mongodinstances with node interleaving. See: MongoDB and NUMA Hardware for more information.Adjust the
ulimitvalues on your hardware to suit your use case. If multiplemongodormongosinstances are running under the same user, scale theulimitvalues accordingly. See: UNIXulimitSettings for Self-Managed Deployments for more information.Use
noatimefor thedbPathmount point.Configure sufficient file handles (
fs.file-max), kernel pid limit (kernel.pid_max), maximum threads per process (kernel.threads-max), and maximum number of memory map areas per process (vm.max_map_count) for your deployment. For large systems, the following values provide a good starting point:fs.file-maxvalue of 98000,kernel.pid_maxvalue of 64000,kernel.threads-maxvalue of 64000, andvm.max_map_countvalue of 131060
To manage swap space, perform one of the following:
Ensure that your system has swap space configured. Refer to your operating system's documentation for details on appropriate sizing.
Do not assign swap space on your system, and configure the kernel to disable swapping entirely.
Ensure that the system default TCP keepalive is set correctly. A value of 120 often provides better performance for replica sets and sharded clusters. See: Does TCP
keepalivetime affect MongoDB Deployments? in the Frequently Asked Questions for more information.
Windows
Consider disabling NTFS "last access time" updates. This is analogous to disabling
atimeon Unix-like systems.Format NTFS disks using the default Allocation unit size of 4096 bytes.
Backups
Schedule periodic tests of your back up and restore process to have time estimates on hand, and to verify its functionality.
Monitoring
Use MongoDB Cloud Manager or Ops Manager, an on-premise solution available in MongoDB Enterprise Advanced or another monitoring system to monitor key database metrics and set up alerts for them. Include alerts for the following metrics:
replication lag
replication oplog window
assertions
queues
page faults
Monitor hardware statistics for your servers. In particular, pay attention to the disk use, CPU, and available disk space.
In the absence of disk space monitoring, or as a precaution:
Create a dummy 4 GB file on the
storage.dbPathdrive to ensure available space if the disk becomes full.A combination of
cron+dfcan alert when disk space hits a high-water mark, if no other monitoring tool is available.
Load Balancing
Configure load balancers to enable "sticky sessions" or "client affinity", with a sufficient timeout for existing connections.
Avoid placing load balancers between MongoDB cluster or replica set components.
Security
For a list of security measures to protect your MongoDB installation, see the MongoDB Security Checklist.