让MongoDB为生产而工作

我在Windows环境下对MongoDB进行了简单的testing。 ID(int32)和Buffer(byte [4096])对象的单个集合按顺序填充。 几乎达到15G(总计16G)的RAM达到了,环境变成了小故障。 一些应用程序被杀害,桌面改变了它的决议,然后它完全挂起。 在硬重启后,我在mongo log中发现了很多这样的logging:

VirtualProtect失败(mcw)e:/Databases/+MongoDB/TestFS/TestFS.7 256400000000 4000000 errno:1455分页文件太小,无法完成此操作。

MapViewOfFile失败e:/Databases/+MongoDB/TestFS/TestFS.26 errno:1450系统资源不足以完成请求的服务。

另外,MongoDB无法连接(到任何数据库)。 日记function已启用。 日志中没有任何错误。 我只能通过删除日志和损坏的数据库来修复它。 这与我希望在生产中看到的行为相去甚远,但我知道现在有很多生产设备。 所以我想明白,我错过了什么或做错了什么。

对。 让我们来看看如何运行一个生产MongoDB集群(是的,集群..你不想只有一个服务器)

1)使用Linux。 认真。 对于内存pipe理来说,这是一个比Windows更加可预测的地方。 你也更有可能find能够帮助你调整Linux上的Mongo服务器的人。

2)给它很多的RAM。 RAM很便宜。 我刚刚推出了一些生产级的服务器作为$工作,他们是36GB的快速ECC DDR3。

3)给它快速的磁盘。 SAS是好的,我怀疑SSD可能会更好,但还没有专门testing。

4)碎片。 select一个体面的分片键 ,并基于这个分区跨多个MongoDB节点。

5)重要。 确保你有一个仍然可以执行一致票数的服务器集群。

6)真的很重要。 保护它。 更改默认的pipe理员用户名和密码,并将其放在防火墙后面。

认真。 我认为你应该看一下上面的几点,也看一下这些生产部署 。 10gen不顾一切地为MongoDB提供大量的文档,我怀疑你没有完整地阅读所有的文档。