【问题标题】:Cassandra deletion - how does it resolve conflicts after some servers go downCassandra 删除 - 一些服务器宕机后如何解决冲突
【发布时间】:2017-05-08 10:53:25
【问题描述】:

想象一下在 2 个节点的 Cassandra 集群上的一个最简单的 Cassandra 表。

我发出一条记录的删除命令。想象一下,节点#2 当时已关闭。 Cassandra 客户端收到来自 node#1 的成功响应并愉快地继续(命令的一致性 lvl = 1)。

然后节点#2 恢复并尝试与节点#1 同步数据。节点#2 声称它有一个节点#1 没有的记录。他们如何确定这是从节点#1 中删除记录的删除操作,而不是向节点#2 添加记录的插入操作(由于任何原因没有到达节点#1)?我谈论删除的原因是我假设在删除之后,Cassandra 不会存储已删除项目的时间戳。

任何有关该问题的有用链接将不胜感激。

我所说的特别是Hinted-Handoff 场景或Read/Repairs。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    Cassandra Repair 可以处理这些情况。

    当您在 Cassandra 中删除数据时,数据不会立即删除,而是 Cassandra 会创建墓碑,指示行/列已删除。墓碑存储到 gc_grace_seconds。

    如果您定期进行修复:

    因此,当您运行修复时,节点会同步数据和创建的墓碑。所以在 gc_grace_seconds 之后,墓碑被删除了。

    如果您不定期进行修复:

    考虑 gc_grace_seconds = 10 天,当节点 #2 关闭时删除节点 #1 中的数据,Cassandra 为节点 #1 中的已删除数据创建墓碑。在您带来节点#2并且没有运行修复并且在gc_grace_seconds(10天)之后,墓碑在节点#1中被删除但在节点#2中没有被删除,如果您现在读取数据,那么数据将重新出现而不是删除。

    因此,您必须对 Cassandra 集群进行定期修复。

    请参阅有关删除的 Cassandra 文档: http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_about_deletes_c.html

    【讨论】:

    • 漂亮的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2010-11-28
    • 2020-01-06
    • 2020-07-21
    相关资源
    最近更新 更多