2016-12-26 17 views
0

我碰到上述行博客 http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_about_hh_c.html在卡桑德拉分包的切换(当群集无法满足客户指定的一致性水平,卡桑德拉不存储提示)

其相当混乱来了。所以我们可以说我有5节点的集群,与RF 3写一致性作为法定人数即2节点

现在,如果我尝试写一些东西并给予了特别的了三个副本节点数据,两个都下降了。那么,这是否意味着cassandra不会存储提示(因为它知道它无法满足首位法定人数的一致性)?并拒绝立即写入,或者将存储提示给他们,并成功回应?

有人可以详细说明吗?

回答

0

这里有两种不同的机制。让我给你一个例子来澄清。

假设我有3节点3复制和一致性仲裁(2)群集。 这意味着当我写入数据库时​​,我必须得到两个响应才能满足我的查询。

当我满足我的查询后,节点将不得不将这个写入发送到第3个节点。处理查询的节点尝试将写入发送到第3个节点。该节点当前不可用,这会导致节点写入已提示的切换。然后它将成功返回给客户端。

注意是暗示切换的一致性已经得到满足后,会发生。提示切换可以确保写入到所有拥有副本的节点。

现在有这个的一个例外,这是你发布的文章中提到的。 一致性级别ANY是一个一致性级别,只要存在能够服务请求的节点,就可以通过编写提示的切换来满足该级别。

1

如果您有RF = 3且2个节点关闭或无法及时处理请求,则写入请求将失败并且不会存储已提示的切换。只有满足请求的一致性级别(CL)并且你在提示的切换窗口内时,才会存储提示的切换。唯一的例外是使用CL = ANY编写的请求。

+0

如果任何节点无法及时处理请求,那么根据文档它将存储提示。你说它不会存储,为什么? –

+0

只有在写入请求能够满足您的情况下的指定一致性级别(CL = QUORUM)时才会存储提示。如果<2个节点能够成功写入请求,则请求将失败并且不会存储任何提示。如果2个节点能够满足写入,则将为第3个节点存储提示。如果所有3个副本都可以写入,则不会存储任何提示。希望这有助于。 – bechbd

+0

因此,无论何时在写入时获取**超时异常**。这意味着它无法达到我的一致性级别,在这种情况下,提示将不会被存储。是吗 ? –