我有一个2节点的aps cassandra(2.0.3)集群,其rep因子为1。我在cqlsh中使用以下命令将rep factor更改为2
ALTER KEYSPACE "mykeyspace" WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 2 };
然后,我尝试在执行此类更改后运行建议的“nodetool修复”。
问题在于该命令有时会很快完成。当它确实完成时,通常会说“丢失通知...”,并且退出代码不为零。
因此,我只是重复此“nodetool修复”,直到完成而没有错误。我还要检查“nodetool状态”是否报告了每个节点的预期磁盘空间。 (使用rep factor 1时,每个节点每个大约有7GB的空间,我希望在修复nodetool之后假设没有集群使用的情况下每个每个为14GB)
在这种情况下,是否有更正确的方法来确定“nodetool修复”已完成?
最佳答案
通常,您可以使用两个nodetool命令监视nodetool repair
操作:
修复操作有两个不同的阶段。首先,它计算节点之间的差异(要完成的维修工作),然后通过将数据流式传输到适当的节点来对这些差异起作用。
这将检查 Activity 的Merkle树计算:
$ nodetool compactionstats
pending tasks: 0
Active compaction remaining time : n/a
可以通过以下方式监视维修流:
$ nodetool netstats
实际上,TheLastPickle的Aaron Morton建议使用以下Bash脚本/命令来监视任何 Activity 的修复流:
while true; do date; diff <(nodetool -h localhost netstats) <(sleep 5 && nodetool -h localhost netstats); done
DataStax在其支持论坛上有关于troubleshooting hanging repairs的帖子。如果您有任何挂起的维修流,则应该可以使用
netstats
看到它们。如果您的节点之一在修复过程中不可用,可能会发生这种情况。要监视特定的修复操作,您可以检查您的日志文件中是否存在以下条目:请注意,修复 session 也应在您的system.log中表示:
[repair #02fc68f0-210c-11e7-aa88-c35a9a02c19a] Starting...
[repair #02fc68f0-210c-11e7-aa88-c35a9a02c19a] Completed...
关于cassandra - 我怎么知道nodetool修复是否完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25064717/