我试图找出,如何参数我的2个节点群集,以便拥有一个精确的副本,如果其中一个已经关闭... 使用此工具查看它:http://www.ecyrd.com/cassandracalculator/
对于以下参数:
Cluster size: 2 / Replication Factor: 2 / Write Level: All / Read Level: One
它给了我结果:
我同意所有这些结果,除了一个,"你可以在没有节点的情况下幸存下来"。 我不知道为什么集群无法从一个节点丢失中幸存下来,如果一个节点丢失,那么"写:全部"将写入剩下的唯一一个节点,不是吗? 然后,当我重新启动第二个节点时,它应该与第一个节点同步,并再次接受写入,不是吗?
如果我错了,有人可以向我解释原因吗?
编辑:
除了持有%:
之外,更多配置会给我相同的结果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
每次它告诉我,我不能在任何节点上遭受损失。
答案 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。