【问题标题】:Cassandra node fail within LOCAL_QUORUM margin, but client still getting failed CL errorsCassandra 节点在 LOCAL_QUORUM 余量内失败,但客户端仍然收到失败的 CL 错误
【发布时间】:2017-06-12 13:37:14
【问题描述】:

我有一个多 DC(AWS 区域)Cassandra 集群。客户端程序连接到具有 4 个节点且 RF=2 的区域之一。但是,当该 DC/区域中只有一个节点出现故障时,客户端会不断收到此错误:

(com.datastax.driver.core.exceptions.UnavailableException:没有足够的副本可用于一致性 LOCAL_QUORUM 查询(需要 2 个但只有 1 个存活))

这里有更多细节:

  • 客户端程序最初是 Jmeter。但是我用 cqlsh 验证了,得到了同样的错误
  • 错误(见上文)大约有 50% 的时间发生,并且发生在读取和写入中
  • 因为有4个节点,RF=2,所以相信LOCAL_QUOROM=2,意思是 本地环最多可以容忍 2 个节点失败
  • 但只有一个停机。我使用“nodetool status”验证了
  • 其他一致性级别运行良好(例如,2、3、QUORUM)
  • 我们在集群中使用 v-node

我很难理解发生了什么:本地环应该有完整的数据副本。 RF=2 应该给我足够的缓冲来对抗一个节点。出了什么问题?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    4 个节点,RF=2

    这意味着每个数据都在集群中的 2 个节点上。

    RF 2 quorum 实际上是 2 个节点。所以如果一个节点宕机了 正如您所描述的那样,大约 50% 的时间会错过本地法定人数。

    RF 是集群中相同数据的副本数,而不是您可以松散的节点数。

    问题在于仲裁,如果您使用一致性级别 1,则可以,并且可以容忍一个节点宕机。

    也看看这个页面:

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

    另外,如果不使用本地仲裁,客户端将去其他数据中心获取数据(有两个,三个等等)

    【讨论】:

    • 这很有意义。没有想清楚。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-11-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多