我在Cassandra有一个3 DC环,每个DC有一个4节点簇。所以它的4个节点* 3(DC)= 12个节点。当我们有Quorum
一致性级别时,我正在测试当某些节点出现故障时Cassandra的行为。我们在每个数据中心设置了一个复制因子3。所以我们的
Quorum = Floor(Sum of Replication FActor/2) + 1. RF = 3 quorum= 5.
理论上如果我的12节点集群中有五个节点,我应该适合读写。所以我在另一个数据中心(Dc2)中放下了一个完整的Datacenter DC1和3个节点。所以我在DC2和整个DC3(4个节点)中有1个节点。我有5个节点。从理论上讲,这应该有利于我的写作在仲裁一致性方面取得成功。但是,当我跑步时,我得到了
Cassandra.Unavailable Exception: Not enough replica available for query at consistency ONE (5 required but only 4 alive)
。
但是,我确实有5个节点存活。我在这里缺少什么?
答案 0 :(得分:2)
QUORUM本身指的是同一数据中心的成员。 在你的情况下DC3有4。 但是你要求QUORUM为5,DC3无法提供。 这就是为什么有像ONE和LOCAL_ONE这样的概念。
我很确定即使你的所有DC节点都已启动,你也会在QUORUM 5上遇到同样的错误。
您可以参考:http://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html
答案 1 :(得分:0)
从我的角度来看,操作应该而且会失败。
从DC开始,您可以随时保证3个副本,RF 3。
另一个DC中的节点有大约60%来确定另一个副本。
3 + 1 = 4.
你要求CL 5。
5> 4 =>失败。
答案 2 :(得分:0)
Quorum适用于整个群集,Local_Quorum适用于单个数据中心。只需了解一些基础知识,cassandra就是分布式系统,意味着数据在您的集群中分布,每个节点拥有一个主要范围,同时复制其他节点的数据。这意味着负责存储一条数据的节点是为一致性计算的唯一节点。在你的情况下,5个节点上升并不意味着写入或读取满足Quorum一致性,因为所有节点上的DC肯定会在至少3个节点中有数据(记住你的RF是3),但DC只有1个节点将要么有或没有你要查询的数据。
在你的情况下,如果你使用Local_quorum点击所有节点的DC,你将得到正确的结果。