情境:
节点分区范围:
问题:
假设我需要插入数据30并且节点A已关闭。在这种情况下,卡桑德拉的行为是什么? Cassandra是否能够写入数据并将成功报告给驱动程序(即使副本节点已关闭且Cassandra需要2个节点来确认写入)?
答案 0 :(得分:2)
您只有1个副本可用于写入(B),因此您将在写入时遇到错误(UnavailableException
)。
最好设计一致性级别/复制因子,以便您可以容忍节点在令牌范围内的失败(考虑将RF提高到3)。
最好不要尝试通过遵循最终一致性路径(R + W <= N)来解决可用性,例如,在这种情况下,W = 1。我们已经尝试过,在操作上它不值得努力。
答案 1 :(得分:2)
RF = 2背后有充分的理由吗?在给定方案的情况下,Quorum在节点关闭方案中不会满意,并且您的写入将失败。我建议你重温一下你的RF。
答案 2 :(得分:1)
您已经确定了RF = 2不是高可用性Cassandra部署的建议复制因子的一个主要原因。将会发生什么取决于驾驶员的行为(令人敬畏的打开或关闭)。
注意,这并不意味着对Node B的写入失败...实际上该值被写入Node B,协调器将为Node A存储一个提示。但是你没有达到你的一致性目标所以它是可能建议您再次尝试写入,直到节点在大多数情况下重新启动。在这种特定情况下,您正在有效地执行ALL,这将无法在节点故障情况下提供预期的行为。
TLDR,不要使用Quorum,RF = 2