首页 > 解决方案 > 没有足够的副本可用于一致性 SERIAL 的查询(需要 2 个但只有 1 个活着)

问题描述

专家们,

我有以下配置3节点集群(Cassandra 2.1):

 - Replication factor of 2
 - Consistency level ONE
 - Driver consistency level SERIAL
 - SimpleStrategy
 - GossipingPropertyFileSnitch

使用此配置,如果我关闭一个节点,我会收到以下错误:

Not enough replica available for query at consistency SERIAL (2 required but only 1 alive)

数据均匀分布在所有节点上,nodetool 状态正确显示一个节点在运行的 2 个 cassandra 节点上已关闭

使用 CONSISTENCY ONE 和 2 个节点 ups,为什么需要两个副本节点都 up ???

我还读到了 SERIAL 驱动器一致性 wrt WRITE 失败:如果三个节点之一关闭,Paxos 提交在以下情况下失败:

如果我将复制因子设置为 3,这将起作用。但我认为没有必要这样做。

我在这里错过了什么吗?

标签: cassandracassandra-2.0

解决方案


您已经发现了 Cassandra 中 Paxos 协议的隐藏宝石之一。在底层,Paxos 的工作方式是使用类似于 QUORUM的一致性级别进行调用。

请注意,它在您的错误消息中抱怨 SERIAL 一致性级别,而不是您设置的一致性级别 ONE。在大多数情况下,LWT 会忽略设置的正常一致性级别。它遵循 SERIAL 或 LOCAL_SERIAL 一致性级别,几乎直接映射到节点的QUORUMLOCAL_QUORUM

两个节点的法定人数为:两个。因此,当一个节点关闭时,您会收到此错误消息。


推荐阅读