以下清单与“ 开发清单”清单一起提供建议,以帮助您避免生产MongoDB部署中出现问题。
dbPath
。使用NFS驱动器会导致性能下降和不稳定。有关更多信息,请参见:远程文件系统。验证所有非隐藏副本集成员的RAM,CPU,磁盘,网络设置等是否均配置相同。
配置oplog大小以适合您的用例:
复制操作日志窗口应涵盖正常的维护和停机窗口,以避免需要完全重新同步。
复制操作日志窗口应涵盖从上次备份还原副本集成员所需的时间。
在版本3.4中进行了更改:复制oplog窗口不再需要通过初始同步来恢复副本集成员所需的时间,因为在数据复制期间会提取oplog记录。但是,要还原的成员必须在本地 数据库中具有足够的磁盘空间,才能在此数据复制阶段持续存储这些操作日志记录。
对于早期版本的MongoDB,复制操作日志窗口应涵盖通过初始同步还原副本集成员所需的时间。
确保您的副本集至少包括三个运行日志的数据承载节点,并且您发出的w:"majority"
写操作要考虑可用性和持久性。
配置副本集成员时,请使用主机名,而不要使用IP地址。
确保所有mongod
实例之间的完全双向网络连接
。
确保每个主机都能自行解决。
确保您的副本集包含奇数个投票成员。
确保mongod
实例具有0
或1
投票。
为了获得高可用性,请将副本集至少部署到 三个数据中心。
tcp_keepalive_time
)调整为100-120。对于MongoDB的连接池行为,Azure负载平衡器上的TCP空闲超时太慢。有关
更多信息,请参见:
Azure生产说明。关闭透明的大页面。有关更多信息,请参见 透明的大页面设置。
在存储数据库文件的设备上调整预读设置。
对于WiredTiger存储引擎,无论存储介质类型(旋转磁盘,SSD等)如何,都将预读设置在8到32之间,除非测试显示以更高的预读值显示出可测量,可重复且可靠的好处。
MongoDB商业支持可以为备用预读配置提供建议和指导。
如果tuned
在RHEL / CentOS上使用,则必须自定义您的
tuned
配置文件。tuned
RHEL / CentOS附带的许多配置文件可能会对其默认设置产生负面影响。自定义您选择的tuned
个人资料以:
将noop
或deadline
磁盘调度程序用于SSD驱动器。
将noop
磁盘调度程序用于来宾VM中的虚拟驱动器。
禁用NUMA或将vm.zone_reclaim_mode设置为0,然后运行mongod
具有节点交错功能的实例。有关
更多信息,请参见:MongoDB和NUMA硬件。
调整ulimit
硬件上的值以适合您的用例。如果多个mongod
或mongos
实例在同一用户下运行,请相应地缩放ulimit
值。请参阅:UNIX ulimit设置以获取更多信息。
使用noatime
该dbPath
安装点。
为您的部署配置足够的文件句柄(fs.file-max
),内核pid限制(kernel.pid_max
),每个进程的最大线程数(kernel.threads-max
)和每个进程的最大内存映射区数(vm.max_map_count
)。对于大型系统,以下值是一个很好的起点:
fs.file-max
价值98000,kernel.pid_max
价值64000kernel.threads-max
价值64000,以及vm.max_map_count
价值128000确保您的系统已配置交换空间。有关适当大小的详细信息,请参阅操作系统的文档。
确保正确设置了系统默认的TCP keepalive。值300通常可以为副本集和分片群集提供更好的性能。请参阅:TCP保持活动时间是否会影响MongoDB部署?有关更多信息,请参见常见问题。
使用MongoDB Cloud Manager或Ops Manager(MongoDB Enterprise Advanced或其他监视系统中提供的本地解决方案)来监视关键数据库指标并为其设置警报。包括以下指标的警报:
监视服务器的硬件统计信息。特别要注意磁盘使用,CPU和可用磁盘空间。
在没有磁盘空间监视的情况下,或作为预防措施:
storage.dbPath
驱动器上创建一个4 GB的虚拟文件,以确保磁盘已满时可用空间。cron+df
如果没有其他监视工具可用,则组合可以在磁盘空间达到高水位标记时发出警报。