2014-02-15 119 views
2

後會失去數據我在Couchbase簇3個節點設置爲1Couchbase羣集節點失敗仿真

在執行1M文檔的多線程插入副本的數目,我重新啓動的節點幾次之一。

結果是,在插入操作結束時,我缺少大約15%的數據。

任何想法如何防止數據丟失?

回答

3

首先,當節點離開集羣時,是否故障轉移節點?在故障轉移之前,其他節點上的副本不會升級爲活動狀態(因此任何副本數據都將無法訪問)。

其次,您是否檢查您的insert操作的返回值?如果一個節點不可訪問(但在故障轉移之前),操作將返回一個異常(可能是「超時」) - 您應確保應用程序重試插入。

第三,默認情況下,Couchbase上的大多數CRUD操作在主節點上發生更新後立即返回,以實現最佳性能。因此,如果你放棄了一個節點,那麼複製品可能還沒有被寫入 - 所以如果你確實執行了故障轉移,那麼將不會有副本,即使是。爲防止出現這種情況,您可以使用observe操作在複製節點具有副本之前不報告操作「完成」 - 請參閱Monitoring Items using observe

請注意,使用觀察會導致性能損失,但這對於您特別關心的修改可能是可以接受的折衷。

+0

謝謝!這裏是另一個問題http://stackoverflow.com/questions/21799031/setting-couchbase-obspollinterval-obspollmax-in-net-client – user3077725