Cassandra:群集或数据中心所有节点上的主范围完全修复

Cassandra:群集或数据中心所有节点上的主范围完全修复,cassandra,cassandra-3.0,repair,Cassandra,Cassandra 3.0,Repair,每个人都同意,Cassandra修复是必要的,但是非常昂贵且容易发生故障,如果集群中的任何节点在集群中的任何其他节点上运行修复时发生故障,则大部分时间都会卡住。我正在以滚动方式使用以下命令对主范围运行完全顺序修复: node repair -pr -full -seq 但有一个疑问,在数据中心的每个节点上运行此修复(我有4个不同的数据中心)就足够了,还是需要在整个集群的每个节点上运行此修复?我找到了一些关于这个主题的文档,但是语言没有正确地回答这个问题。例如 更新:我在这里实际上错了,我认为环

每个人都同意,Cassandra修复是必要的,但是非常昂贵且容易发生故障,如果集群中的任何节点在集群中的任何其他节点上运行修复时发生故障,则大部分时间都会卡住。我正在以滚动方式使用以下命令对主范围运行完全顺序修复:

node repair -pr -full -seq
但有一个疑问,在数据中心的每个节点上运行此修复(我有4个不同的数据中心)就足够了,还是需要在整个集群的每个节点上运行此修复?我找到了一些关于这个主题的文档,但是语言没有正确地回答这个问题。例如


更新:我在这里实际上错了,我认为环是两个DC而不是单个DC,实际的令牌环更多的是:

    | DC  | Node | Token |
    |-----|------|-------|
    | DC1 |node1 |   1   |     
    | DC2 |node2 |   5   |
    | DC1 |node3 |   10  |
    | DC2 |node4 |   15  |
    | DC1 |node5 |   20  |
    | DC2 |node6 |   25  |

这里节点4的主要范围是11-15,而不是6-15(主要范围+本地范围)。您必须在每个节点上执行-pr。删除原始文件,以免造成任何混淆。

使用
修复-pr-full
必须在群集中的每个节点上运行修复。请参阅我几年前写的这篇文章,了解原因的详细描述。

命令的哪一部分使它能够修复您在其中执行它的DC之外拥有的令牌范围?修复始终涉及所有副本,而不考虑DC。当您的RF为
{DC1:1,DC2:1}
时,每个令牌在每个DC中都有一个副本。arg中的令牌确定修复涉及哪个dc的节点。为了可视化,我们将它们分成两个表格,但最好记住,这实际上是一个单一的列表。我不确定我们在这里谈论的是同一件事。对于要修复所有副本的上述修复命令(nodetool repair-pr),必须在所有节点上运行该命令:注意:如果使用此选项,则必须在群集中的每个节点上运行nodetool repair-pr以修复所有数据。否则,某些数据范围将无法修复。()
repair-pr
是一种简写,用于将令牌范围开始/结束指定为修复协调器作为主范围拥有的令牌(或者在vNode的情况下,每个令牌范围有多个子修复)。该范围内的所有副本都包括所有DC中的多个节点,并且都包括在内。在上述RF的情况下,您也只需在DC中的所有节点上实际执行
-pr
,而不是每个节点。因为一个DC中的主范围之和覆盖了整个令牌环。如果设置正确,也可能只需在一个DC的一个机架内进行设置。顺便说一句,在这种情况下,DS文档是错误的。但更安全的做法是只在每个节点上进行设置,而不进行任何假设。