卡桑德拉失去一个节点

时间:2015-01-28 12:39:28

标签: cassandra cluster-computing

我试图找出,如何参数我的2个节点群集,以便拥有一个精确的副本,如果其中一个已经关闭... 使用此工具查看它:http://www.ecyrd.com/cassandracalculator/

对于以下参数:

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

它给了我结果:

  • 您的阅读一致
  • 您可以幸免于无节点
  • 您实际上每次都从 1个节点阅读
  • 您每次都在写 2个节点
  • 每个节点都包含 100%的数据。

我同意所有这些结果,除了一个,"你可以在没有节点的情况下幸存下来"。 我不知道为什么集群无法从一个节点丢失中幸存下来,如果一个节点丢失,那么"写:全部"将写入剩下的唯一一个节点,不是吗? 然后,当我重新启动第二个节点时,它应该与第一个节点同步,并再次接受写入,不是吗?

如果我错了,有人可以向我解释原因吗?

编辑:

除了持有%:

之外,更多配置会给我相同的结果
Cluster size: 3 / Replication Factor: 2 / Write Level: All / Read Level: One
Cluster size: 3 / Replication Factor: 2 / Write Level: Quorum / Read Level: One

即使我尝试与Reads保持一致,而不是写入:

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

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

2 个答案:

答案 0 :(得分:5)

这是因为复制因素

  

当复制因子超过节点数时,写入被拒绝,但只要达到所需的一致性,就会提供读取   水平可以达到。

来源:http://www.datastax.com/docs/1.0/cluster_architecture/replication

答案 1 :(得分:0)

  

我同意所有这些结果,除了一个,“你可以幸免于失去   没有节点“。我不明白为什么集群无法从一个节点生存   丢失,如果一个人死亡,“Write:ALL”将写入唯一的一个节点   离开了,不是吗?然后,当我重新启动第二个节点时,它   应该与1st同步,并再次接受写入,不是吗?

     

如果我错了,有人可以向我解释原因吗?

这不是一致性的工作原理。当节点出现故障时,Cassandra在制定QUORUM时不会忘记它。您的复制因子为2,因此ALL为2,一旦一个节点关闭,您就会关闭以进行写入。

如果您需要阅读一致性(请确保您这样做)。然后尝试RF为3的3节点集群,然后在QUORUM读取和写入。这意味着您现在可以处理节点以进行读写操作。

最后一个例子:

  

群集大小:2 /复制因子:2 /写入级别:一个/读取级别:仲裁

QUORUM = RF / 2 + 1 = 2所以你失败的原因是什么。

一般情况下,您需要为QUORUM系统提供奇数RF。