为什么cassandra能够在没有数据丢失的情况下幸免于没有节点丢失。复制因子2

时间:2017-08-22 10:36:18

标签: cassandra replication consistency cassandra-3.0 eventual-consistency

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

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

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

没有数据丢失,你可以在没有节点的情况下幸存下来。

作为参考,我看到了问题Cassandra loss of a node

但它仍然没有帮助理解为什么写入级别1将与复制2将使我的cassandra集群不能在没有数据丢失的情况下丢失没有节点?

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

有人可以通过一个例子来帮助我理解。

3 个答案:

答案 0 :(得分:3)

我猜计算器正在使用的是最糟糕的情况。

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

让我们假设您的写入协调器是持有您正在编写的记录副本的节点之一。使用写入级别ONE,一旦写入被提交到应该保存数据的两个节点之一,您就告诉集群确认您的写入。协调器可能会在尝试联系其他节点之前执行此操作(以提高客户端所获得的延迟)。如果在那一刻,在确认写入之后但在尝试联系第二个节点之前,协调器节点出现故障并且无法恢复,那么您就丢失了该写入及其数据。

答案 1 :(得分:0)

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

关键是我们需要复制品(令牌)而不是节点。另请参阅回答here的类似问题。

答案 2 :(得分:0)

这是因为写入级别为1.如果您的应用程序仅在1个节点上写入(并且等待数据最终获得一致/同步,这将花费非零时间),那么数据可以如果在同步发生之前丢失了一台服务器本身就会丢失