【问题标题】:ResponseError: Not enough replicas available for query at consistency SERIAL (2 required but only 1 alive)ResponseError:没有足够的副本可用于一致性序列查询(需要 2 个但只有 1 个活动)
【发布时间】:2020-06-07 16:56:56
【问题描述】:

我是 Cassandra 的新手,目前我遇到了一个问题,我的 cassandra 设置如下,

  1. 1 个 DC,1 个集群
  2. 3 个节点。
  3. 简单策略
  4. 持久写入:真
  5. 复制因子:创建键空间时为 2。
  6. 使用 IF NOT EXISTS 将数据插入表中。
  7. 种子节点:2 个

然后我关闭了一个种子节点,我得到了以下错误:

ResponseError: 没有足够的副本可用于一致性 SERIAL 的查询(需要 2 个但只有 1 个存活)

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    这很正常,SERIAL 需要一个具有法定数量副本的 Paxos 事务。对于 RF 2,法定人数为 2; iow,你不能容忍任何节点在 SERIAL 上使用 RF 2 写入密钥空间。

    经验法则:不要使用 RF 2,它没用。您的法定人数是:(2/2)+1 = 2,但对于 RF 3,它是相同的法定人数。因此,您应该始终更喜欢 RF 3。如果您将密钥空间更改为 RF 3,即使一个副本已关闭,您的应用程序也能够以 SERIAL 写入。

    另见https://www.ecyrd.com/cassandracalculator/

    【讨论】:

    • 您能否将问题标记为已解决?谢谢!
    【解决方案2】:

    根据理解,一致性序列相当于 QUORUM。您在 3 节点集群中有 RF=2,因此 Cassandra 中的数据基于哈希插入。因此,当您将数据插入集群时,可能会在两个种子节点上插入数据。因此,当您在一个种子节点关闭的情况下检索数据时,您可能会收到此错误,因为集群未达到所需的一致性级别。 请参阅链接了解更多详情。 https://docs.datastax.com/en/ddac/doc/datastax_enterprise/dbInternals/dbIntConfigSerialConsistency.html

    【讨论】:

    • 我没有做查询,当一个节点关闭时,我只是再次插入。然后得到这个错误。
    • 这是否会受到集群中现有数据的影响?
    • @zhianABCD 至少两个应该根据您的配置向协调节点确认成功插入。
    猜你喜欢
    • 2019-01-19
    • 2015-11-10
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2018-04-14
    • 2020-10-23
    相关资源
    最近更新 更多