MongoDB Java驱动程序副本集故障转移

时间:2014-04-24 07:48:47

标签: java mongodb mongodb-java

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

2 个答案:

答案 0 :(得分:2)

如果您希望确保您的写入操作仅在主要接收时被确认,并且至少有一个次要使用此操作。如果您的主服务器在与辅助服务器同步之前出现故障,它将防止数据丢失(当然这会产生一些性能成本)。

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

有关写作问题的更多详情,请参见MongoDB docs

附加说明

由于您的集合中只有两个成员,因此在松开一个节点后,所有写入操作都将失败,因为没有多数。为避免这种情况,您需要将仲裁者升级为成熟的成员。

答案 1 :(得分:1)

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