【问题标题】:EACH_QUORUM With Tolerance For Datacenter LossEACH_QUORUM 具有数据中心丢失容差
【发布时间】:2023-04-10 07:29:01
【问题描述】:

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

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

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

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

希望对此有任何见解。

【问题讨论】:

标签: cassandra datastax datastax-java-driver


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多