Cassandra节点在LOCAL_QUORUM范围内失败,但客户端仍然出现CL错误

时间:2017-01-26 22:47:42

标签: cassandra

我有一个多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"
  • 进行了验证
  • 其他一致性水平正常(例如TWO,THREE,QUORUM)
  • 我们使用v-node作为集群

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

1 个答案:

答案 0 :(得分:3)

4个节点,RF = 2

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

带有RF 2仲裁的

实际上是2个节点。因此,如果一个节点出现故障 正如你所描述的那样,在大约50%的时间内会被当地的法定人数错过。

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

问题在于法定人数,如果您使用一致性级别1,则可以容忍一个节点。

另请看这个页面:

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

如果不使用本地仲裁,客户端将转到其他数据中心获取数据(使用TWO,THREE等)