【问题标题】:Cassandra nodetool repair best practicesCassandra nodetool 修复最佳实践
【发布时间】:2019-08-06 13:34:05
【问题描述】:

这个问题适用于 Cassandra 2.2

我很尴尬地说我仍然不明白我应该什么时候运行nodetool repair,或者更准确地说是在哪些节点上运行。

到目前为止,我知道为确保正确处理删除,我应该以低于GC_GRACE_SECONDS 的频率运行修复。所以这很酷。

问。如果我有一个包含 9 个节点且复制因子为 3 的集群,我应该运行哪种类型的修复?更重要的是,我是在每个节点上运行修复,还是只在一个节点上运行?

问。如果我有多个数据中心,这会改变我进行维修的方式吗?我必须在每个 DC 中运行它们,还是可以从一个 DC 中的一个节点协调

我希望这是一个微不足道的问题,有人可以告诉它是怎么回事。

【问题讨论】:

  • 这样的问题可能会征求社区成员的许多强烈意见,他们可能更喜欢一种方法而不是另一种方法。一般指南是避免此类问题,而是针对您遇到的问题提出更具体的问题。

标签: cassandra


【解决方案1】:

nodetool repair 命令可以在指定节点上运行或 如果未指定节点,则在所有节点上。发起节点 repair 成为操作的协调节点。

如果未指定节点,它将在负责该分区范围的所有节点上运行。

在集群中的每个节点上运行nodetool repair -pr 来修复所有 数据。否则,部分范围的数据将无法修复

nodetool repair -pr 选项适用于跨多个数据中心进行维修。

注意:对于 Cassandra 2.2 及更高版本,跨数据中心修复的推荐选项:使用 -dcpar 或 --dc-parallel 修复 数据中心并行。

Nodetool Repair

【讨论】:

  • 我不相信这是正确的。 nodetool repair 仅在它正在执行的节点上运行。要修复所有节点,您必须在所有节点上运行它。 datastax.com/dev/blog/repair-in-cassandra
  • Node A 上运行 nodetool repair 将修复与 Node A 共享相同数据范围的所有其他节点(想想:分片)。因此,从技术上讲,节点数量和复制因子将决定您需要在哪些节点上运行它们。例如只需要在每个 odd node 上运行 2 个复制因子。但是,实际上,您可能需要在每个节点上运行它,以防通信问题导致某些数据未正确复制。
【解决方案2】:

这是recommendation from datastax

足够频繁地运行修复,以便在之前修复每个节点 达到 gc_grace_seconds 设置中指定的时间。已删除 如果满足此要求,则数据在集群中得到妥善处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2015-03-25
    • 2016-05-19
    • 2018-07-29
    • 2015-07-13
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多