我在Cassandra中有一个3 DC环,每个DC有一个4节点集群。所以它的4个节点*3(DC)= 12个节点。我正在测试Cassandra在某些节点宕机时的行为,当我们有Quorum一致性级别时。我们将每个数据中心的复制因子设置为3。所以我们的
Quorum = Floor(Sum of Replication FActor/2) + 1. RF = 3 quorum= 5.
从理论上讲,如果我的12节点集群中有5个节点,我应该可以很好地进行读写。因此,我关闭了一个完整的数据中心DC1,以及另一个数据中心(Dc2)中的3个节点。因此,我在DC2中有1个节点,整个DC3(4个节点)。我有5个节点。从理论上讲,这应该对我的写入在仲裁一致性方面取得成功是有好处的。但是,当我跑的时候,我
Cassandra.Unavailable Exception: Not enough replica available for query at consistency ONE (5 required but only 4 alive)。
但是,我确实有5个节点是活动的。这里我漏掉了什么?
发布于 2016-10-14 23:23:22
Quorum适用于整个群集,Local_Quorum适用于单个数据中心。只需了解一些基础知识,cassandra是分布式系统,这意味着数据分布在集群中,每个节点拥有一个主要范围,同时复制其他节点的数据。这意味着负责存储数据的节点是唯一计算一致性的节点。在您的示例中,5个节点已启动并不意味着满足写入或读取的仲裁一致性,因为所有节点均已启动的DC肯定会在至少3个节点中包含数据(请记住,您的RF为3),但只有1个节点的DC将包含或不包含您要查询的数据。
在您的例子中,如果您使用Local_quorum在所有节点都打开的情况下访问DC,您将获得正确的结果。
发布于 2016-03-19 13:35:00
QUORUM本身是指同一数据中心的成员。在您的案例中,DC3的定额为4。但是您要求定额为5,这是DC3无法提供的。这就是为什么会有ONE和LOCAL_ONE这样的概念。
我非常确定,即使您的所有DC节点都在运行,您也会在QUORUM 5上收到相同的错误。
你可以参考:http://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html
发布于 2016-10-14 16:38:50
在我看来,这些操作应该失败,也将失败。
从DC上,你可以保证在任何时候3个副本,RF 3。
另一个DC中的节点有大约60%的时间来固定另一个副本。
3+1= 4。
你要的是CL5.
5>4 =>失败。
https://stackoverflow.com/questions/36097368
复制相似问题