【问题标题】:Cassandra LOCAL_QUORUM卡桑德拉 LOCAL_QUORUM
【发布时间】:2015-10-19 10:58:54
【问题描述】:

我无法理解/查找有关如何在 cassandra 中计算各种法定人数的信息。

假设我有一个跨 2 个数据中心使用网络拓扑策略的 16 节点集群。每个数据中心的复制因子为 2(DC1:2,DC2:2)。

在本例中,如果我使用 LOCAL_QUORUM 写入数据,我会将数据写入 4 个节点(每个数据中心 2 个),但何时会发生确认? 1个数据中心2个节点写入后?

另外,为了保持强读一致性,我需要写节点+读节点>复制因子。在上面的示例中,如果读取和写入都是 LOCAL_QUORUM,我将有 2 + 2,这不能保证强读取一致性。我是否正确理解这一点?那么我需要什么级别来确保强读取一致性?

这里的目标是确保如果数据中心出现故障,读取/写入可以继续,同时最大限度地减少延迟。

【问题讨论】:

    标签: cassandra datastax cql cassandra-2.0 nosql


    【解决方案1】:

    协调器收到来自协调器同一个DC的2个节点的确认后,写入成功。

    对读取和写入使用 LOCAL_QUORUM 可以获得强一致性,前提是读取和写入使用相同的 DC,并且仅用于该 DC。

    【讨论】:

    • 如何更改此设置以便能够从两个数据中心读取数据并保持强一致性?
    • 改用 EACH_QUORUM。
    • 写时使用 EACH_QUORUM,读时没有 EACH_QUORUM,因为读时 LOCAL_QUORUM 就足够了。或者,在您的环境中,使用 QUORUM 进行写入和读取的操作大致相同,但会容忍单个节点故障(每个 DC 中的 RF=2,如果任何副本已关闭,那么您将无法满足该 DC 的法定人数- 但是,集群范围的仲裁是 4 个副本中的任意 3 个,可能满足您的需要)。
    【解决方案2】:

    上一个答案是正确的:“协调器收到来自协调器同一个DC的2个节点的确认后,写入将成功。”读取也是一样。

    Quorum 始终按 N/2+1 计算(N 为复制因子),具有 local_quorum 可避免其他数据中心的延迟。

    据我了解,RF 为 2 和 LOCAL_QUORUM 时,您具有更好的本地一致性,但在分区的情况下不可用:如果单个节点丢失,则该节点及其范围令牌的所有写入和读取都将失败复制品。

    因此,如果您打算使用 Quorum,我建议您使用 3 的 RF。对于 2 个副本,您最好使用 ONE。

    【讨论】:

    • 更多:人们经常将提示含义与 CL 和可用性混淆。示例:2 个节点在 3 上处于活动状态,节点关闭正在为 1/2 的数据提供令牌(因为 RF 为 2),因此一半的写入查询和读取查询将因一致性 QUORUM 而失败。如果您想要 2 的 RF 和极高的可用性,您应该将 CL 更改为 ONE 或 ANY,这样您的查询才会成功。或者,您可以将 RF 更改为 3 以解决仲裁问题。参照。 datastax.com/dev/blog/modern-hinted-handoff 和官方文档:docs.datastax.com/en/cassandra/2.0/cassandra/dml/….
    【解决方案3】:

    一旦 LOCAL_QUORUM 在任何一个数据中心完成其工作,客户端将从协调器节点获得 WRITE 或 READ 确认。

    https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/dml/dmlClientRequestsMultiDCWrites.html

    如果写入一致性级别为 LOCAL_ONE 或 LOCAL_QUORUM,则只有与协调节点位于同一数据中心的节点必须响应客户端请求才能使请求成功。

    使用 LOCAL_ONE 或 LOCAL_QUORUM 来减少地理延迟,从而减少对客户端写入请求响应时间的影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多