【问题标题】:What does Cassandra nodetool repair exactly do?Cassandra nodetool repair到底是做什么的?
【发布时间】:2015-11-27 05:03:16
【问题描述】:

来自http://docs.datastax.com/en/cassandra/2.0/cassandra/operations/ops_repair_nodes_c.html我知道

nodetool repair 命令修复给定数据范围内所有副本的不一致性。

  • 但它如何解决不一致的问题?它使用 Merkle 树编写 - 但这是为了比较而不是修复“损坏”数据。
  • 如何“破坏”数据?硬盘出现故障的常见情况有哪些?

抛开问题不谈:是压实驱逐了墓碑,对吧?那么运行 nodetool repair 比 gc_grace seconds 更频繁的要求只是为了确保所有数据都传播到适当的副本?不应该是通常的情况吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    每当对副本的写入由于某种原因未完成时,数据可能会变得不一致。这可能发生在节点关闭、节点启动但网络连接关闭、队列已满且写入被丢弃、磁盘故障等情况下。

    当通过比较 merkle 树检测到不一致的数据时,数据的坏部分通过从具有较新数据的节点流式传输来修复。 Streaming 是 Cassandra 中的一种基本机制,也用于将空节点引导到集群中。

    您需要在 gc grace 秒内运行修复的原因是,墓碑将同步到所有节点。如果一个节点缺少一个墓碑,那么它不会在压缩期间删除该数据。有 tombstone 的节点会在 compaction 期间删除数据,然后当他们稍后运行修复时,可以从丢失 tombstone 的节点中复活删除的数据。

    【讨论】:

    • 谢谢。需要明确的是,“无论出于何种原因,只要对副本的写入未完成,数据就会变得不一致。” - Cassandra 使用提示切换来缓解这种情况,对吗?提示切换是自动触发的,因此这种状态是可能的,但很少见?
    • Cassandra 有一些机制可以帮助保持数据的一致性。提示切换将存储由于节点关闭而失败的写入,并在节点恢复时完成它们。但它只适用于有限的停机时间,因此如果节点停机时间超过提示窗口,您将开始错过写入。另一种机制是读取修复机会,它会在读取完成时慢慢修复数据。如果您拥有良好的硬件和良好的网络,那么数据不一致的情况很少见,但仍然会发生。
    • 提示的切换保留默认值 3 小时。如果节点停机时间超过该时间,则提示将被丢弃。此外,如果有大量提示,“提示缓冲区”可能会溢出,一些提示将被丢弃。在任何一种情况下,数据都会处于不一致的状态。
    猜你喜欢
    • 2017-08-28
    • 2015-01-13
    • 2017-07-06
    • 2015-08-06
    • 2013-09-02
    • 2014-01-02
    • 2013-10-10
    • 2017-05-08
    • 2022-01-20
    相关资源
    最近更新 更多