达到一致性级别后复制失败

时间:2016-08-24 17:38:35

标签: cassandra consistency

我的复制因子为3,一致性级别为LOCAL_QUORUM。我的群集大小为5。

使用LOCAL_QUORUM,我的客户端在将数据写入两个节点后写入结果成功。但是如何复制到第三个节点,比如cassandra如何选择第三个节点,以及cassandra在第三个节点上无法复制的内容是什么时候?

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

2 个答案:

答案 0 :(得分:2)

当您使用LOCAL_QUORUM进行书写时,您正在写入所有节点,但您只能等待LOCAL_QUORUM个确认。这意味着写入第三个(慢)节点可能在确认后发生,或者如果无法传递则可以保存为提示。

答案 1 :(得分:2)

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

在读取时,如果需要强一致性,则应确保读取一致性和写入一致性的总和超出复制因子。

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

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

您可以在datastax docs about consistency

中详细了解相关信息
  

读写操作的可靠性取决于用于验证操作的一致性。当满足以下条件时,可以保证强一致性:

     

R + W> Ñ