我有一个包含2个成员和仲裁者的MonogDB副本集。问题是当主节点发生故障并且mongo正在选择新的主节点时,我有一些数据丢失。我相信这是我可以在Java驱动程序级别上控制的。请帮我找到正确的设置,以便在发生故障转移时没有任何数据丢失
答案 0 :(得分:2)
如果您希望确保您的写入操作仅在主要接收时被确认,并且至少有一个次要使用此操作。如果您的主服务器在与辅助服务器同步之前出现故障,它将防止数据丢失(当然这会产生一些性能成本)。
WriteResult result = collection.insert(..., WriteConcern. REPLICAS_SAFE);
有关写作问题的更多详情,请参见MongoDB docs。
附加说明
由于您的集合中只有两个成员,因此在松开一个节点后,所有写入操作都将失败,因为没有多数。为避免这种情况,您需要将仲裁者升级为成熟的成员。
答案 1 :(得分:1)
在初选期间,任何写入都将导致异常,您必须重试这些写入或将任何消息转发回用户。重试没有内置逻辑,因此您必须编写自己的重试处理程序。