Couchbase在群集节点故障模拟后丢失数据

Couchbase在群集节点故障模拟后丢失数据,couchbase,Couchbase,我在Couchbase集群中有3个节点,副本数设置为1 在执行1M文档的多线程插入时,我多次重新启动其中一个节点 结果是,在插入操作结束时,我丢失了大约15%的数据 您知道如何防止数据丢失吗?首先,您是否在节点退出群集时对其进行故障切换?在进行故障切换之前,其他节点上的副本将不会升级为活动副本(因此任何副本数据都将无法访问) 其次,您是否检查insert操作的返回值?如果节点不可访问(但在故障转移之前),操作将返回异常(可能是“超时”)—您应该确保应用程序重试插入 第三,默认情况下,Couchb

我在Couchbase集群中有3个节点,副本数设置为1

在执行1M文档的多线程插入时,我多次重新启动其中一个节点

结果是,在插入操作结束时,我丢失了大约15%的数据


您知道如何防止数据丢失吗?

首先,您是否在节点退出群集时对其进行故障切换?在进行故障切换之前,其他节点上的副本将不会升级为活动副本(因此任何副本数据都将无法访问)

其次,您是否检查
insert
操作的返回值?如果节点不可访问(但在故障转移之前),操作将返回异常(可能是“超时”)—您应该确保应用程序重试插入

第三,默认情况下,Couchbase上的大多数CRUD操作会在主节点上进行更新后立即返回,以获得最佳性能。因此,如果您确实丢失了一个节点,那么复制副本可能尚未写入,因此即使您执行了故障切换,也不会有复制副本。为了防止出现这种情况,您可以使用
observe
操作在副本节点具有副本之前不报告操作“完成”-请参阅


请注意,使用observe将导致性能损失,但对于您特别关心的修改,这可能是一个可接受的折衷方案。

谢谢!还有一个问题