为什么cassandra不能在没有数据丢失的情况下在没有节点丢失的情况下生存下来。复制因子 2

Why can't cassandra survive the loss of no nodes without data loss. with replication factor 2

您好,我正在使用网站尝试不同的配置 https://www.ecyrd.com/cassandracalculator/

但是我无法理解以下配置显示的结果

Cluster size  3
Replication Factor  2
Write Level 1   
Read Level 1

You can survive the loss of no nodes without data loss.

作为参考,我看到了问题

但它仍然无助于理解为什么写入级别 1 与复制 2 会使我的 cassandra 集群无法在没有节点丢失的情况下幸存下来而不丢失数据?

写入请求发送到所有副本节点,即使 1 响应,它也是成功的,因此假设 1 个节点关闭,所有写入请求将发送到另一个副本节点并且 return 成功.它将最终保持一致。

谁能举个例子帮助我理解。

当您读取或写入数据时,Cassandra 会计算数据的哈希令牌并分发到各个节点。当你有 3 个节点集群且复制因子为 2 时,意味着你的数据存储在 2 个节点中。因此,当 2 个节点关闭时负责令牌 A 而该令牌不是节点 3 的一部分,最终即使您有一个节点,您仍然会有 TokenRangeOfflineException。

重点是我们需要副本(令牌)而不是节点。另请参阅已回答的类似问题

我猜计算器正在处理的是最坏的情况。

如果您的数据在三个节点中的两个节点上冗余可用,则您可以在一个节点丢失时幸免于难。写入级别为 ONE 的问题是,无法保证数据在您的写入被确认后立即存在于两个节点上。

让我们假设您的写入协调器是持有您正在写入的记录副本的节点之一。使用写入级别 ONE,您告诉集群在写入提交到应该保存数据的两个节点之一时立即确认您的写入。协调器甚至可能在尝试联系另一个节点之前就这样做(以增加客户端感知的延迟)。如果在那一刻,在确认写入之后但在尝试联系第二个节点之前,协调器节点出现故障并且无法恢复,那么您将丢失该写入和数据。

之所以如此,是因为写入级别为 1。如果您的应用程序仅在 1 个节点上写入(并等待数据最终获取 consistent/sync,这将花费非零时间) ,那么如果在同步发生之前该服务器本身丢失,数据可能会丢失