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

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

各位专家,

我有以下配置的 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???

我还读到串行驱动器一致性 wrt WRITE 失败: 如果三个节点之一宕机,在以下情况下 Paxos 提交失败:

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

我是不是遗漏了什么?

您已经找到了 Cassandra 中 Paxos 协议的一颗隐藏宝藏。在幕后,Paxos 的工作方式是使用 QUORUM-like 一致性级别进行调用。

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

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