使 MongoDB 用于生产

Sta*_*tan 3 mongodb

我在windows环境下对MongoDB做了一个简单的测试。具有 ID (int32) 和 Buffer (byte[4096]) 的单个对象集合按顺序填充。在达到近 15G(总共 16G)RAM 后,环境出现故障。一些应用程序被杀死,桌面更改其分辨率,然后完全挂起。硬重启后,我在 mongo 日志中发现了很多这样的记录:

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

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

此外,MongoDB 无法再连接(连接到任何数据库)。日记功能已启用。日志中没有任何错误。我只能通过删除日志和损坏的数据库来修复它。这与我希望在生产中看到的行为相去甚远,但我知道,存在大量的生产安装。所以我试图理解,我错过了什么或做错了什么。

Tom*_*nor 6

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

1)使用Linux。严重地。与 Windows 相比,内存管理等方面的可预测性要高得多。您也更有可能找到可以帮助您在 Linux 上调整 Mongo 服务器的人。

2)给它大量的内存。内存很便宜。我刚刚为 $job 指定了一些生产级服务器,它们是 36GB 的快速 ECC DDR3。

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

4)碎片。选择一个合适的分片键,并基于它在多个 MongoDB 节点之间进行分片。

5) 重要的。确保您有一组服务器,这些服务器仍然可以执行一致投票数

6)真的很重要。保护它。更改默认管理员用户名和密码,并将其置于防火墙之后。

严重地。我认为您应该看看上面的几点,并阅读其中的一些生产部署。10gen 竭尽全力为 MongoDB 提供大量文档,我怀疑您没有完整阅读所有文档。

  • 好吧,考虑到今天是星期天,并且您的问题是在 3 小时前发布的,当时我发布此内容,您的“有很多废话”的回答相当令人反感。大多数用户还没有看到这个问题。 (3认同)
  • 我并不是说@TomO'Connor 的贡献是对还是错。但我是说,你在问你的问题的早期就在你的反馈中表现得相当消极和冒犯,而且你的问题的框架(因为它是一个你遇到问题的测试安装)对我来说是模糊的,无论是询问 MongoDB 对您的项目的实现还是您希望它如何修复,因此 Tom 在设置建议中的回答不一定是坏的。 (3认同)
  • 其次,如果@TomO'Connor 在使用 Windows 作为 MongoDB 的数据库平台方面有过糟糕的经历,那么这就是他要告诉你的。毫无疑问,StackExchange 在 Windows 上运行。但我记得他们使用 MSSQL。不是 MongoDB。如果你开始在 Windows 上谈论 Apache(我遇到了问题)并将它与使用 Windows 的 SE 进行比较,我会同样 O_o,因为它们使用 IIS,而不是 Apache。Apache 建立在 Linux 上,并在 Linux 上进行了最严格的测试。Windows 是一个糟糕的端口。 (2认同)