如何仅在特定数据中心内运行修复?

时间:2015-05-11 22:05:55

标签: cassandra cassandra-2.0 datastax datastax-enterprise

我想在更大的群集中对特定的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)

2 个答案:

答案 0 :(得分:2)

CASSANDRA-7317你应该只使用-pr来表示在群集中的所有节点上运行repair -pr(这包括所有数据中心)。否则,您可能最终错过了修复中的一些令牌范围。

您在c * 2.0.9中引入的错误消息阻止用户一起运行-local和-pr。

如果您只想修复本地DC,请不要使用-pr标志。

要减少运行维修的影响,请查看以下选项:

OpsCenter维修服务

自动处理您的维修并在整个gc_grace期间进行展开,这样您就不必担心从操作角度进行维修,以及2)您的cassandra摄取不会受到影响昂贵的每周工作(维修是CPU和IO密集型)。

维修服务替代

如果您不在DSE上,则修复服务将显示为灰色。您可以编写和管理自己的修复服务,如脚本。查看Stump's github,了解这可能是什么样子。

注意:密切注意此票CASSANDRA-6434

答案 1 :(得分:2)

上述答案在所有方面都是正确的,除了Stump的github不再由Stump维护,只是为了减少损坏的流对维修的影响(更长的维修会导致更大的断流可能性,这是一个不可恢复的失败)。使用Gallew's github获取当前版本。

对于实际的维修服务,您可以尝试Limelight Network's github