繁体   English   中英

Cassandra Quorum:一致性级别

[英]Cassandra Quorum : Consistency Level

我在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个节点群集中有五个节点,那么我应该会读写。 因此,我关闭了一个完整的数据中心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个节点处于活动状态。 我在这里想念什么?

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

从我的角度来看,操作应该并且将会失败。

通过启动的DC,您可以随时保证3个副本,即RF 3。

另一个DC中位于上一个的节点大约有60%可以确定另一个副本。

3 +1 = 4。

您要CL 5。

5> 4 =>失败。

Quorum适用于整个群集,而Local_Quorum适用于单个数据中心。 仅需了解一些基础知识,cassandra是分布式系统,这意味着数据在您的群集中分布,每个节点拥有一个主范围,并同时复制其他节点的数据。 这意味着负责存储数据的节点是唯一为一致性计算的节点。 在您的情况下,5个节点处于活动状态并不意味着满足写入或读取的仲裁一致性,因为所有节点处于活动状态的DC肯定会在至少3个节点中保留数据(请记住您的RF为3),但是DC只有1个节点将拥有或没有您要查询的数据。

在您的情况下,如果您使用Local_quorum命中所有节点,则DC将获得正确的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM