3

我决定在业余时间开始开发一个小的 Web 应用程序,这样我就可以了解 MongoDB。我计划获得一个 Amazon AWS 微型实例并在那里开始开发和 alpha 阶段。但是,我在 Stack Overflow 上偶然发现了一个让我担心的问题:

但是为了持久性,您需要使用至少 2 个 mongodb 服务器实例作为主/从。否则,您可能会丢失最后一分钟的数据。

真的吗?我不能让我的盒子上安装了所有东西(Apache、PHP、MongoDB)并依赖于正确存储的数据吗?至少,MongoDB 中必须有一个配置选项,以使其即使安装在单个盒子上也能可靠运行——不是吗?

4

2 回答 2

14

您拥有的有关主/从设置的信息已过时。使用日志运行单服务器 MongoDB 是一种持久的数据存储,因此对于不需要副本集或处于开发阶段的用例,日志将运行良好。

但是,如果您在生产中,我们建议使用副本集。对于最低限度的设置,理想情况下,您将运行三个(或更多)mongod 实例,一个接收读取和写入的“主”,一个将来自主的写入复制到的“辅助”,以及一个仲裁器,一个mongod 的实例,它允许在主节点不可用时进行投票。这种“自动故障转移”意味着,如果您的主节点在给定时间无法接收来自您的应用程序的写入,则辅助节点将成为主节点并接管从您的应用程序接收数据。

您可以在此处阅读有关日志和复制的更多信息,并且您绝对应该熟悉一般文档,以便更好地了解 MongoDB 的全部内容。

于 2012-05-03T16:13:03.580 回答
0

复制提供冗余并提高数据可用性。由于不同数据库服务器上有多个数据副本,复制可以保护数据库免受单个服务器丢失的影响。复制还允许您从硬件故障和服务中断中恢复。有了额外的数据副本,您可以将其中的一份专门用于灾难恢复、报告或备份。

在某些情况下,您可以使用复制来增加读取容量。客户端可以向不同的服务器发送读写操作。您还可以在不同的数据中心维护副本,以增加分布式应用程序的数据的局部性和可用性。MongoDB 中的复制

副本集是一组托管相同数据集的 mongod 实例。一个 mongod,主要的,接收所有的写操作。所有其他实例(辅助实例)从主实例应用操作,以便它们具有相同的数据集。

主节点接受来自客户端的所有写操作。副本集只能有一个主副本。因为只有一个成员可以接受写操作,所以副本集提供了严格的一致性。为了支持复制,主节点在其 oplog 中记录对其数据集的所有更改。有关详细信息,请参阅主要内容。

于 2014-06-20T06:03:42.330 回答