节点工具修复命令是修复群集中的所有节点还是修复执行该命令的单个节点?

时间:2019-03-27 08:45:15

标签: cassandra nodetool

根据用于修复nodetool的datastrax文档(最新版本)

所有nodetool修复命令选项都是可选的。如果未指定可选的命令参数,则默认值为:

  • 完全修复在所有键空间和所有表上运行。
  • 修复同时在具有相同副本数据的所有节点上并行运行。
  • 作业线程数为1。
  • 无追踪。没有验证。

但是根据https://academy.datastax.com的在线课程,他们提到我们需要在每个节点上分别运行nodetool repair命令。

下面是视频的链接:转到3:44

https://academy.datastax.com/units/21018-repair-dse-operations-apache-cassandra?resource=ds210-datastax-enterprise-6-operations-with-apache-cassandra

我感到困惑的是,“ nodetool repair”命令会修复群集中的所有节点,或者仅修复执行命令的单个节点?

2 个答案:

答案 0 :(得分:0)

让我们说我们有一个三节点群集,复制因子2,复制策略为SimpleStrategy。 Node1将具有Node1的数据以及Node2的副本。 Node2将具有Node2的数据以及Node3的副本。 Node3将具有Node3的数据以及Node1的副本。

现在,如果您在Node1上运行nodetool repair。由于默认为完全修复。修复了以下数据:

1)Node1中的Node1数据

2)Node1在Node3中的副本

3)Node1中Node2的副本

4)Node2中的Node2数据

在这种情况下,Node3的数据或副本未修复。因此,应该在Node3上运行nodetool修复,以修复整个群集。

在3:44的视频中,他谈到了--partitioner-range,这意味着仅主分区得以修复。因此,在上述群集中,如果您在Node1上运行nodetool repair --partitioner-range,那么

1)Node1中的Node1数据

2)Node1在Node3中的副本

在这种情况下,应在随后的所有节点上运行nodetool repair --partitioner-range。

答案 1 :(得分:-1)

如果未指定节点(与数据中心无关),则可以在特定节点或群集中的所有节点上运行nodetool repair命令。

http://cassandra.apache.org/doc/latest/operating/repair.html

https://docs.datastax.com/en/archived/cassandra/2.2/cassandra/operations/opsRepairNodesWhen.html