2016-08-24 29 views
1

我具有复制因子3和LOCAL_QUORUM的一致性级别。我的群集大小为5.实现一致性级别后复制失败

使用LOCAL_QUORUM,我的客户端在将数据写入两个节点后写入结果成功。但是,如何复制到第三个节点,比如cassandra如何选择第三个节点,以及cassandra在第三个节点上复制失败的时间或时间?

我需要更多地了解复制部分。因为如果用于写入的两个节点之一失败,那么我的读取将无法实现LOCAL_QUORUM一致性。

回答

2

当你用LOCAL_QUORUM写你正在写所有节点但你只等待LOCAL_QUORUM确认。这意味着写入第三个(慢速)节点可能会在确认后发生,或者如果无法传递,可能会将其保存为提示。

+0

提示,将发生在场景中,:强一致性可以保证当下列条件为真。但是在存储提示之前协调节点本身失败的情况会发生什么? –

+0

然后你将没有任何提示,并将需要修复 – RussS

2

一致性级别并不反映要写入多少副本,但在协调cassandra节点可以将响应返回给客户端之前,需要多少副本才能确认写入。写入操作最终会在所有副本上完成,即使失败了,也会有提示,读取修复和修复等机制,使您的数据进入一致状态。

阅读时,如果您想要强一致性,则应确保读取一致性和写入一致性的总和超过您的复制因子。

对于您的情况,复制因子为3,使用LOCAL_QUORUM进行读取和写入操作需要至少2个副本用于读取,而2个写入大于您的复制因子(3)。

鉴于此,即使写入失败的其他副本,但成功的两个为您提供了成功的写入响应,只要您阅读的一致性级别需要2副本或更高(即LOCAL_QUORUM),您可以确保您将获得正确的数据。

您可以在datastax docs about consistency阅读更多关于这一点:读

可靠性和写入操作取决于用于验证操作的一致性。当复制节点不是经由协调器节点可到达的

R + W>Ñ

相关问题