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 我几年前写的关于原因的详细描述。
正如每个人都会同意的那样,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 我几年前写的关于原因的详细描述。