Answers:
它的行为方式取决于您的配置,使用的Cassandra版本以及运行repair命令的方式。
如果仅nodetool repair
在集群中的单个节点上运行,它将修复该节点负责的所有数据(令牌范围)以及负责该数据的其他节点。
因此,例如,如果要nodetool repair
在给定群集中的单个节点上运行命令:
也就是说,可以使用-hosts
和-dc
标志定义哪些主机和数据中心来执行修复。此外,如果您使用-pr
标志(这将只挑选的第一个标记范围的节点负责),你必须运行nodetool repair -pr
在所有集群中的节点。
要记住的另一个标志是-inc
Cassandra 2.1中包含的标志。此选项将仅修复新数据(以前未修复的数据)。依赖于此时要特别小心,尤其是如果您经常删除数据时。(更多关于这个)
还有一点要记住的是,Cassandra中默认的维修方式可能会有所不同。从Cassandra 2.1开始,仅在运行nodetool repair
时会默认执行完整的顺序修复。您将要查找您的版本的功能。
有关该主题的更多阅读:
不,您不必在每个单独的节点上运行。nodetool repair
在一组节点上运行,这在文档中有明确说明。
您可以限制要在其上进行修复的节点或部分数据。例如,您可以-pr
为分区范围,节点负责的范围提供选项,但这必须在整个群集上运行。但是,如果选择-local
,则将修复节点本地数据中心中的节点。
nodetool repair
在单个节点上运行不足以修复所有配置中所有节点上的所有复制数据。nodetool repair
在单个节点上运行将仅修复在该节点上复制的数据。(添加该-pr
选项会将修复限制为该节点是第一个副本的数据。)但是,如果群集中的数据没有在该节点上进行复制,则必须nodetool repair
在其他节点上运行。
-pr
在每个节点上运行,那会覆盖整个键空间吗?