EACH_QUORUM 容忍数据中心丢失

EACH_QUORUM With Tolerance For Datacenter Loss

我正在寻找一些想法,以在 3 个数据中心的场景中实现 EACH_QUORUM 的一致性,并容忍 1 个数据中心的写入丢失。

根据我的理解,EACH_QUORUM 不容忍数据中心丢失。只要数据中心关闭,我所有的写入都会失败。一种选择是重试具有较低一致性级别的请求,例如 'QUORUM'.

我正在寻找的选项是,是否有办法删除故障 DC 并在剩余的 2 个实时数据中心上实现 EACH_QUORUM。从服务器端,我能想到的唯一办法就是将故障数据中心的所有节点退役,这很麻烦。

假设我的客户端应用程序知道数据中心已关闭,Cassandra 客户端驱动程序是否有办法传入实时数据中心列表,以便协调器节点尝试仅在这些数据中心上实现 EACH_QUORUM .

希望对此有任何见解。

如果您正在寻找在 DC 故障中幸存下来的能力,为什么要使用 EACH_QUORUM?然后使用 LOCAL_QUORUM - 它正是为此而设计的。

您关于使用 local_quorum 重试的想法可以通过实施 RetryPolicy 并将其应用于会话来实现。由于驱动程序知道它无法实现 each_quorum,因此它不会实际尝试,您可以在重试策略中处理错误,而不是让应用程序代码冒泡。我已经成功地尝试了这种方法。

我正在考虑的另一个想法是为每个 DC(配置为 "local DC")创建一个单独的会话,并针对每个 DC 异步执行。然后根据错误和我可以从集群状态收集到的信息,记录警告或抛出错误。