Cassandra 如何知道nodetool修复是否完成
我有一个2节点的ApacheCassandra(2.0.3)集群,rep factor为1。我在cqlsh中使用以下命令将rep factor更改为2Cassandra 如何知道nodetool修复是否完成,cassandra,cassandra-2.0,nodetool,Cassandra,Cassandra 2.0,Nodetool,我有一个2节点的ApacheCassandra(2.0.3)集群,rep factor为1。我在cqlsh中使用以下命令将rep factor更改为2 ALTER KEYSPACE "mykeyspace" WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 2 }; 在做了这种改变之后,我试着运行推荐的“nodetool修复” 问题是这个命令有时会很快完成。当它这样结束时,通常会说“丢失通知…”,
ALTER KEYSPACE "mykeyspace" WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 2 };
在做了这种改变之后,我试着运行推荐的“nodetool修复”
问题是这个命令有时会很快完成。当它这样结束时,通常会说“丢失通知…”,退出代码不是零
所以我只是重复这个“nodetool修复”,直到它毫无错误地完成。我还检查“nodetool status”是否报告每个节点的预期磁盘空间。(使用rep factor 1,每个节点大约有7GB,我预计在nodetool修复后,每个节点都有14GB,假设同时没有集群使用)
在这种情况下,是否有更正确的方法确定“nodetool repair”已完成?一般来说,您可以使用两个nodetool命令监视
nodetool repair
操作:
- 压缩状态
- 网络状态
$ nodetool compactionstats
pending tasks: 0
Active compaction remaining time : n/a
可通过以下方式监控维修流:
$ nodetool netstats
事实上,Aaron Morton建议使用以下Bash脚本/命令监视任何活动修复流:
while true; do date; diff <(nodetool -h localhost netstats) <(sleep 5 && nodetool -h localhost netstats); done
启动修复命令时,可以使用选项--trace监视修复流:
nodetool repair--trace
我们还可以在“活动”下的Opscenter控制台中监控修复进度。这是一个很好的答案,这是Aaron Morton@Aaron的源线程好的,如果nodetool netstats
告诉您一切都完成了,并且nodetool repair
没有返回会怎么样?那么,在该运行中使用Ctrl-C是否安全?在我这边,我只是测试并重置我的数据库,但这样做(Ctrl-C),然后再次尝试运行nodetool repair
,它又挂了起来…@AlexisWilke在修复命令中使用Ctrl-C总是安全的。事实上,停止修复的唯一方法是使用nodetool停止验证
。有很多事情会导致挂起的维修。通过JMX监控未决修复的数量,如果该数量从未达到零,则可能需要反弹节点。网络不稳定也会导致挂起的修复。@Aaron很抱歉不知道,但是,我如何通过JMX检查挂起的修复数量?我尝试使用Jconsole从我的计算机远程连接到AWS中的一个Cassandra节点,但无法连接。使用进程替换
[repair #02fc68f0-210c-11e7-aa88-c35a9a02c19a] Starting...
[repair #02fc68f0-210c-11e7-aa88-c35a9a02c19a] Completed...