2014-04-24 35 views
2

我有一个包含2个成员和一个仲裁器的MonogDB副本集。问题是当主节点关闭时,mongo选择新的主节点时,我有一些数据丢失。我相信这是我可以在Java驱动程序级别上控制的东西。请帮助我找到正确的设置,以便在发生故障转移时不会有任何数据丢失MongoDB Java驱动程序副本集故障转移

回答

1

在初选期间,任何写入都会导致异常,您必须重试这些写入或将任何消息中继给用户。没有内置的重试逻辑,因此您必须编写自己的重试处理程序。

2

如果要确保只在接收到接收时写入操作通过初级和至少一次次使用这个。如果主节点在与辅助节点同步之前发生故障(这当然会产生一些性能成本),它将防止数据丢失。

WriteResult result = collection.insert(..., WriteConcern. REPLICAS_SAFE); 

关于编写关注的更多细节在MongoDB docs

附注

因为你只需要在您所设定的两个成员都写,因为没有大多数你失去了一个节点之后的操作将失败。为了避免这种情况,您需要将仲裁人升级为成员。

+0

我只有2个成员,所以如果去那里只有1个成员(主),所以会抛出一个错误,因为只有主要可访问 – PHPDEV

+1

正确。为了避免数据丢失**和**在松动一个节点后设置了功能副本,您需要将仲裁器升级为成熟的副本集成员。 – Sebastian