【问题标题】:Cassandra high availabilityCassandra 高可用性
【发布时间】:2020-12-13 07:57:40
【问题描述】:

我有一个带有 NetworkTopologyStrategy 的六节点 Cassandra 集群,这是我的架构:

Rack1
Cassandra-01
Cassandra-02

Rack2
Cassandra-03
Cassandra-04

Rack3
Cassandra-05
Cassandra-06

我们使用 CL=QUORUM 和复制因子 3 进行读/写,因此从技术上讲,我们可以容忍单个 RACK 故障(从机架中丢失 2 个节点)。

例如,我向 Cassandra 集群 (CL=QUORUM,RF=3) 写入数据,而 Rack3 将离线(硬件故障),我总共有 4 个节点。理论上我应该能够向 Cassandra 写入和读取数据,因为一致性级别满足。但是当我使用 [Cassandra 计算器] 时,它会说:

您可以在丢失 1 个节点的情况下幸免于难,而不会影响应用程序。

您可以在丢失 1 个节点的情况下幸存下来而不会丢失数据。

但为什么只有 1 个节点?

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    计算器没有内置关于上述配置的机架方面的知识 - 所以让我们暂时搁置它。您已输入 6 个节点,RF 3 和在 Quorum 上写入/读取。

    如果不涉及机架(它们都在同一个机架中)-那么答案就有意义了。

    由于在 Quorum 进行写入,您只能保证 2 个节点在写入点的数据被确认为成功,如果在写入 2 个节点后立即失败,您可能会遭受数据丢失(因为第三个没有得到数据)。因此,在最坏的情况下,您只能容忍 1 个节点丢失而不会丢失数据。

    您说对了,将 NetworkTopologyStrategy 与 3 个机架、每个机架 2 个节点一起使用 - 并且使用 Quorum,您可能会丢失整个机架并仍然运行。为什么计算会改变?

    好吧,有些计算没有 - 虽然您仍然可以在 Quorum 写入并在 Quorum 读取,但仍有可能读取的节点还没有数据,但它应该读取修复和修复本身。 (假设它在桌子等上启用)

    不过,您不应该丢失数据,因为机架方面意味着您还可以进一步确定同一机架中发生故障的 2 个节点上没有出现相同的分区。因此,当 2 个节点关闭时,您并没有消除同一分区的 2 个副本 - 另一个机架中的至少一个节点具有数据(否则不会确认仲裁写入)

    如果你点击页面本身的 github 链接,你可以看到它在 html 中提供的每个值的计算,例如:

     var dataloss = w - 1;
     $('#dataloss').text( dataloss > 1 ? dataloss+" nodes" : dataloss === 1 ? "1 node" : "no nodes");
    

    在这种情况下,w 是“写入”一致性级别,当设置为 Quorum 时,计算 w 为 2。没有机架输入,代码中也没有考虑它。

    【讨论】:

    • 谢谢我的朋友!它真的对我有帮助!
    【解决方案2】:

    答案就在你的问题中。 检查 max(write level) 或 max(read level) ,在你的情况下是 2 。

    RF - 2 ,即 3 - 2 = 1 个节点 随时可能被攻破。

    【讨论】:

      猜你喜欢
      • 2013-09-12
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 2012-08-30
      • 2018-07-21
      • 2019-03-04
      相关资源
      最近更新 更多