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

Cassandra: primary range full repair on all nodes of cluster or datacenter

正如每个人都会同意的那样,Cassandra 修复是必要的,但非常昂贵且容易出现故障,如果集群中的任何节点出现故障而修复在任何其他节点上 运行,大多数情况下都会卡住在集群中。我正在运行使用以下命令以滚动方式对主要范围进行完整顺序修复:

node repair -pr -full -seq

但有疑问,在数据中心的每个节点(我有 4 个不同的数据中心)上 运行 进行此修复是否足够,或者是否需要 运行整个集群的每个节点?我找到了一些关于这个主题的文档,但是语言没有正确回答这个问题。例如3.1 Primary range repair


更新:其实我这里是错误的,认为ring是两个DC而不是一个,实际的token Ring更多的是:

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

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

对于 repair -pr -full,您必须 运行 修复集群中的每个节点。看到这篇 blog post 我几年前写的关于原因的详细描述。