【问题标题】:Hinted handoff in Cassandra (When the cluster cannot meet the consistency level specified by the client, Cassandra does not store a hint)Cassandra 中的hinted handoff(当集群不能满足客户端指定的一致性级别时,Cassandra 不存储提示)
【发布时间】:2017-05-11 02:13:33
【问题描述】:

我在博客中遇到了上述行 http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_about_hh_c.html

这很令人困惑。所以假设我有 5 个节点集群RF 为 3Write Consistency 作为 Quorum 即 2 个节点

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

有人可以详细说明一下吗?

【问题讨论】:

    标签: cassandra cassandra-2.0 consistency


    【解决方案1】:

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

    【讨论】:

    • 如果任何节点无法及时处理请求,那么根据文档,它将存储提示。你说它不会存储,为什么?
    • 仅当写入请求能够满足您的情况下指定的一致性级别 (CL=QUORUM) 时才会存储提示。如果
    • 所以每当我在写作时遇到超时异常。这意味着它无法满足我的一致性级别,在这种情况下将不会存储提示。是吗?
    • 请看看这个博客datastax.com/dev/blog/how-cassandra-deals-with-replica-failure。它说 cassandra 将在上述情况下保持提示切换。
    • 这里要清楚,如果您从 1 个节点获得超时异常,但其他 2 个节点成功写入,则将为超时的节点存储提示的切换。但是,如果您已经有 1 个节点关闭(这是我的想法)并且第二个节点超时,则写入将无法满足 CL,失败的写入将被发送到客户端并且不会存储任何提示的切换。很抱歉造成混乱,我应该在我之前的回答中更清楚,但就 C* 用例而言,这远远落后于杂草。
    【解决方案2】:

    这里有两种不同的机制。让我举个例子来说明一下。

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

    满足查询后,节点必须将此写入发送到第三个节点。已处理查询的节点尝试将写入发送到第三个节点。该节点当前不可用,这会导致该节点改为写入提示切换。然后向客户端返回成功。

    注意,提示切换发生在满足一致性之后。提示切换确保写入到达拥有副本的所有节点。

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

    【讨论】:

    • 那么为什么人们说hinted handoff 提供完整的写入可用性(datastax.com/blog/2012/12/modern-hinted-handoff)?当满足 CL 时,即使我们不存储提示,写入也是可以的。
    • 完全写入可用性是即使节点关闭也能写入集群的能力。如果您不关心数据的一致性,提示切换提供了这样做的能力。 (事实并非所有节点上都有数据)
    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 2015-10-09
    • 2017-09-12
    • 2018-06-13
    • 1970-01-01
    • 2018-01-07
    • 2016-07-05
    • 2015-06-03
    相关资源
    最近更新 更多