2014-04-24 36 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