Cassandra节点丢失

4
我想了解如何为我的两个节点集群设置参数,以便在其中一个停机时拥有完全相同的副本... 使用此工具进行检查:http://www.ecyrd.com/cassandracalculator/ 对于以下参数:
Cluster size: 2 / Replication Factor: 2 / Write Level: All / Read Level: One

这是结果:

  • 您的读取是一致的
  • 您可以承受没有节点的损失
  • 每次读取只涉及一个节点
  • 每次写入涉及两个节点
  • 每个节点都完全保存了您的数据

我同意所有这些结果,除了一个,"您可以承受没有节点的损失"。 如果一个节点死了,“写入:ALL”会写入到剩下的唯一节点,不是吗? 然后当我重新启动第二个节点时,它应该与第一个节点同步,并再次接受写入,不是吗?

如果我错了,有人能解释一下为什么吗?

编辑:

更多配置将给我相同的结果,除了持有%:

Cluster size: 3 / Replication Factor: 2 / Write Level: All / Read Level: One
Cluster size: 3 / Replication Factor: 2 / Write Level: Quorum / Read Level: One

即使我试图保持读取一致,而不是写入:
Cluster size: 2 / Replication Factor: 2 / Write Level: One / Read Level: Quorum

每次它都告诉我不能在任何节点上承受损失。


在实际生产Cassandra部署中,只有2个节点的集群非常不寻常。RF 3更为常见,因为它允许在丢失一个节点的情况下进行法定读写操作。 - psanford
2个回答

5

那么,您如何配置Cassandra集群以实现OP希望的目标? - Petr Janeček
我们可以尝试将一致性级别设置为 ONE。 - Yasmeen
如果我正确地阅读了Datastax的报价,那么读取将被服务。因此,我将写入设置为One,将读取设置为Qorum,这应该使我能够承受一个节点的损失?但是工具显示不会。我已经编辑了我的问题以获取更多配置信息。 - TheSquad
1
案例:写入:ONE,读取:Quorum。Quorum =(复制因子/ 2)+1,因此在本例中(2/2)+1 = 2个节点。这意味着两个节点都需要运行才能进行读取。 - Yasmeen
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - TheSquad

0
除了一个结果,我同意所有的结果,“您可以在没有节点丢失的情况下生存”。如果一个节点死亡,“写入:ALL”将写入剩下的唯一一个节点,不是吗?然后当我重新启动第二个节点时,它应该与第一个节点同步,并再次接受写入,不是吗?
这不是一致性的工作方式。当一个节点关闭时,Cassandra不会在计算QUORUM时忘记它。您的复制因子为2,因此ALL为2,只要一个节点关闭,您就无法进行写入。
如果您需要读取一致性(确保您需要)。那么尝试使用RF为3的3个节点集群,然后在QUORUM上进行读写。这意味着您现在可以处理读取和写入的节点关闭。
对于您的最后一个示例:
群集大小:2 / 复制因子:2 / 写入级别:One / 读取级别:Quorum
QUORUM = RF / 2 + 1 = 2,这就是为什么您无法进行写入的原因。

一般来说,QUORUM系统需要使用奇数个RF。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接