Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 卡桑德拉高可用性_Cassandra_Cassandra 3.0 - Fatal编程技术网

Cassandra 卡桑德拉高可用性

Cassandra 卡桑德拉高可用性,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我有一个带有NetworkTopologyStrategy的六节点Cassandra群集,下面是我的模式: Rack1 Cassandra-01 Cassandra-02 Rack2 Cassandra-03 Cassandra-04 Rack3 Cassandra-05 Cassandra-06 我们使用CL=QUORUM和复制因子3进行读/写,因此从技术上讲,我们可以容忍单机架故障(机架中丢失2个节点) 例如,我写入Cassandra集群(CL=QUORUM,RF=3),Rack3将脱

我有一个带有NetworkTopologyStrategy的六节点Cassandra群集,下面是我的模式:

Rack1
Cassandra-01
Cassandra-02

Rack2
Cassandra-03
Cassandra-04

Rack3
Cassandra-05
Cassandra-06
我们使用CL=QUORUM和复制因子3进行读/写,因此从技术上讲,我们可以容忍单机架故障(机架中丢失2个节点)

例如,我写入Cassandra集群(CL=QUORUM,RF=3),Rack3将脱机(硬件故障),总共有4个节点。理论上,我应该能够向Cassandra写入和读取数据,因为一致性级别满足要求。但当我使用[卡桑德拉计算器]时,它会说:

您可以在丢失1个节点的情况下生存下来,而不会影响应用程序

您可以在丢失1个节点的情况下生存,而不会丢失数据


但是为什么只有一个节点呢?

计算器没有内置关于上述配置的机架方面的知识-所以让我们暂时不谈。您已在仲裁中输入了6个节点,RF 3和写入/读取

如果没有涉及机架(它们都在同一机架中),那么答案是有意义的

由于写入是在仲裁时进行的,因此您只能保证其中两个节点在写入点的数据被确认为成功,如果在写入两个节点后立即失败,您可能会遭受数据丢失(因为第三个节点没有获取数据)。因此,在最坏的情况下,您只能容忍1个节点丢失,而不会导致潜在的数据丢失

您可以正确地说,使用具有3个机架、每个机架2个节点的NetworkTopologyStrategy,以及使用仲裁,您可能会丢失整个机架并仍在运行。为什么计算会改变

好吧,有些计算没有-虽然您仍然可以在仲裁时写入和在仲裁时读取,但仍有可能正在读取的节点还没有数据,但它应该读取、修复和修复自身。(假设已在表格等上启用)

不过,您不应该丢失数据,因为机架方面意味着您还可以进一步确定,同一机架中发生故障的两个节点没有在两个节点上显示相同的分区。因此,当2个节点关闭时,您没有消除同一分区的2个副本-另一个机架中至少有一个节点具有数据(否则仲裁写入将不会被确认)

如果按照页面本身上的github链接进行操作,则可以看到它在html中提供的每个值的计算结果,例如:

 var dataloss = w - 1;
 $('#dataloss').text( dataloss > 1 ? dataloss+" nodes" : dataloss === 1 ? "1 node" : "no nodes");

在本例中,w是“写入”一致性级别,当设置为Quorum时,w计算为2。代码中没有对机架的输入,也没有对机架的考虑。

答案在您的问题中。 检查最大值(写入级别)或最大值(读取级别),在您的情况下为2


RF-2,即3-2=1个节点可以在任何时候被破坏。

谢谢我的朋友!它真的帮助了我!