当副本节点出现故障时会发生什么情况,具有法定人数的一致性级别?

What happens when a replica node goes down, with consistency level of quorum?

场景:

问题:

假设我需要插入数据30,节点A宕机了。在这种情况下 Cassandra 的行为会是什么? Cassandra 是否能够写入数据并将成功报告回驱动程序(即使副本节点已关闭并且 Cassandra 需要 2 个节点来确认写入)?

您只有 1 个副本可用于写入 (B),因此写入时会出错 (UnavailableException)。

最好设计您的一致性级别/复制因子,以便您可以容忍令牌范围内的节点故障(考虑将您的 RF 提高到 3)。

另外最好不要尝试按照最终一致性路径(R + W <= N)来解决可用性问题,例如在这种情况下设置 W=1。我们已经尝试过了,但在操作上不值得付出努力。

RF=2 背后有充分的理由吗?在这种情况下,在节点关闭的情况下不会满足 Quorum 并且您的写入将失败。我建议你重新检查一下你的 RF。

您已确定 RF=2 不是高可用性 Cassandra 部署的建议复制因子的关键原因之一。会发生什么取决于驱动程序行为(tokenaware 打开或关闭)。

  1. 节点 B 或 C 将被选为协调器
  2. 协调器将尝试写入 B 和 A,因为 2 的法定人数是 2
  3. 协调器将注意到节点 A 尚未确认写入,因此向客户端报告无法实现法定人数。

注意,这并不意味着写入节点 B 失败...实际上值已写入节点 B,协调器将为节点 A 存储提示。但是您尚未实现一致性目标,因此在大多数情况下,建议您再次尝试写入,直到节点恢复正常。在这种特定情况下,您正在有效地执行所有操作,这不会在节点故障情况下给出预期的行为。

TLDR,不要使用 RF=2 的 Quorum