我想在更大的群集中对特定的Cassandra数据中心运行修复。我怎么能这样做nodetool repair -local -pr
似乎不起作用:
$ nodetool repair -local -pr
Exception in thread "main" java.lang.RuntimeException: Primary range repair should be performed on all nodes in the cluster.
at org.apache.cassandra.tools.NodeCmd.optionalKSandCFs(NodeCmd.java:1680)
at org.apache.cassandra.tools.NodeCmd.main(NodeCmd.java:1378)
答案 0 :(得分:2)
每CASSANDRA-7317你应该只使用-pr来表示在群集中的所有节点上运行repair -pr(这包括所有数据中心)。否则,您可能最终错过了修复中的一些令牌范围。
您在c * 2.0.9中引入的错误消息阻止用户一起运行-local和-pr。
如果您只想修复本地DC,请不要使用-pr标志。
要减少运行维修的影响,请查看以下选项:
自动处理您的维修并在整个gc_grace期间进行展开,这样您就不必担心从操作角度进行维修,以及2)您的cassandra摄取不会受到影响昂贵的每周工作(维修是CPU和IO密集型)。
如果您不在DSE上,则修复服务将显示为灰色。您可以编写和管理自己的修复服务,如脚本。查看Stump's github,了解这可能是什么样子。
注意:密切注意此票CASSANDRA-6434
答案 1 :(得分:2)
上述答案在所有方面都是正确的,除了Stump的github不再由Stump维护,只是为了减少损坏的流对维修的影响(更长的维修会导致更大的断流可能性,这是一个不可恢复的失败)。使用Gallew's github获取当前版本。
对于实际的维修服务,您可以尝试Limelight Network's github。