/ 中存储网

MongoDB生产环境性能和可靠性注意事项

2014-02-24 00:00:00 来源:中存储网

本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容。这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者们关注。本文详细描述了影响MongoDB,特别是生产环境的关键系统配置。以下是正文。

安装包

确保你安装了最新的稳定版本。这是了解最新版本的最佳场所,即使你稍后选择从包管理器安装。

生产环境始终使用64位版本。32位版本是为测试和部署环境准备的,不适于生产环境部署,因为它只能存储2GB以内的数据。了解更多内容请查看32位限制。

32位版本的存在是为满足非正式环境的使用场景。

 操作系统

MongoDB发行版目前可用于Max OS X,Linux,Windows Server 2008 R2 64位版,Windows 7(32位及64位版),Windows Vista,以及Solaris平台。

注意:在可能的情况下,MongoDB使用GNU C库(glibc)。MongoDB要求版本至少在glibc-2.12-1.2.el6以避免早先版本一个已知的Bug。为了效果最佳请使用至少2.13版本。

  并发

早先版本的MongoDB中所有写操作都集中使用实例中的唯一一个读写锁。从2.2开始,每个数据库开始具有一个独立的读写锁,这使得一个数据库可以并发读,同时每个数据库有了独立的写控制。查看并发页了解更多信息。

  日志

MongoDB使用预先写日志到磁盘日志的办法来保证MongoDB能够快速从崩溃或其他严重错误中恢复写操作。

为了保证mongod能够从崩溃中恢复并继续处于可用状态,你应该启用日志。查看日志页以了解更多内容。

 网络

  使用可信任网络环境

始终在可信任环境中运行MongoDB,并启用网络策略禁止未知机器,系统和网络访问。犹如依赖网络访问的任何一个敏感系统一样,你的MongoDB环境应该只为指定的,需要访问的系统开发,例如应用程序服务器,监控服务及其他MongoDB组件。

注意:默认情况下认证功能未开启,mongod推断自己处于可信任环境中。如有必要你可以启用安全认证模式。

查看安全章节的内容以了解更多信息。特别是:

●配置选项

●防火墙

●为MongoDB配置Linux iptables防火墙

●为MongoDB配置Windows netsh防火墙

对于Windows用户,在Windows上部署MongoDB时考虑Windows Server TCP技术文章中的内容。

 连接池

为避免单个mongod或mongos实例连接资源越负荷,请确保客户端维护了合理数量的连接池配置。

connPoolStats数据库命令能够返回一个分片集群里mongos和mongod实例中当前数据库打开连接的信息。

  硬件考量

MongoDB的设计是基于兼容大多数硬件考虑,几乎没有特别的要求或限制。MongoDB的核心组件能够运行于小端字节优先的硬件,主要是x86/x86_64处理器上。客户端类库(例如驱动)在大端优先或小端优先系统上都可以运行。

 硬件需求和限制

能够让MongoDB最有效率地运行的硬件应该包含以下特性:

  分配了足够的内存和CPU

犹如对于所有软件一样,更多的内存和更快的CPU时钟频率对于性能很重要。

基本上,数据库并非受限于CPU。因此,增加核心数量虽然有帮助,但不会提供显着的回报。

  使用固态硬盘(SSD)

MongoDB使用SATA SSD能得到很好的效果和很好的性价比。

在足够经济的情况下请使用SSD。传统硬盘也可能很有效率,但SSD对于随机IO访问的良好支持更符合mongod的数据更新模型。

传统硬盘通常也是个好的选择,因为使用更昂贵的硬盘来提高随机IO性能并不是那么有效(只能是每次2倍)。使用SSD或增加RAM的容量可能对于提升IO更有效率。

  避免使用远程文件系统

远程文件存储系统可能对MongoDB造成性能问题。查看远程文件系统了解更多关于MongoDB和存储的信息。

  MongoDB和NUMA硬件

重要:这里讨论的NUMA仅限于Linux系统,因此不影响运行于其他类Unix系统或Windows系统。

在运行NUMA的系统中运行MongoDB可能造成一系列问题,包括一段时间内的效率低下和高系统进行使用率。

当运行MongoDB在NUMA硬件上时,你应该为MongoDB禁用NUMA并使用Interleave内存策略。

注意:MongoDB 2.0以上版本如果部署在Linux系统上,启动时会检查系统配置,如果系统是基于NUMA的,会给出警告。

为禁用NUMA并启用interleave内存策略,请使用numactl并使用以下方式启动mongod

numactl --interleave=all /usr/bin/local/mongod

然后,为了禁用proc配置中的zone reclaim,请使用以下命令:

echo 0 > /proc/sys/vm/zone_reclaim_mode

为了彻底禁用NUMA,你必须操作以上两步。了解更多信息,请查看/proc/sys/vm/*文档。

查看MySQL“疯狂交换”问题和NUMA效果一文,它描述了NUMA对数据库造成的影响。这篇博客确定了NUMA对MySQL的影响,但对于MongoDB的影响也是类似的。这篇文章介绍了NUMA和它的目标,并指出了为什么这些目标和生产环境数据库的需求是不相容的。