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

replication fails after achieving consistency level

我的复制因子为 3,一致性级别为 LOCAL_QUORUM。我的簇大小是 5.

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

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

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

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

在读取上,如果你想要强一致性,你应该确保你的读取一致性和写入一致性的总和超过你的复制因子。

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

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

您可以在 datastax docs about consistency:

阅读更多相关信息

Reliability of read and write operations depends on the consistency used to verify the operation. Strong consistency can be guaranteed when the following condition is true:

R + W > N