2014-02-15 123 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