cassandra 如何知道nodetool修复是否已完成

icnyk63a  于 2022-11-23  发布在  Cassandra
关注(0)|答案(4)|浏览(236)

我有一个2节点apache cassandra(2.0.3)群集,rep factor为1。我在cqlsh中使用以下命令将rep factor更改为2

ALTER KEYSPACE "mykeyspace" WITH REPLICATION =   { 'class' : 'SimpleStrategy', 'replication_factor' : 2 };

然后,我尝试运行推荐的“nodetool修复”后,做这种类型的改变。
问题是这个命令有时完成得非常快。当它像这样完成时,它通常会说“丢失通知...”并且退出代码不是零。
所以我只是重复这个'nodetool修复',直到它完成没有错误。我还检查'nodetool状态'报告每个节点的预期磁盘空间。(如果代表因子为1,每个节点大约有7GB,我希望在nodetool修复后,每个节点有14GB,假设同时没有集群使用)
在这种情况下,是否有更正确的方法来确定“nodetool修复”是否已完成?

14ifxucb

14ifxucb1#

一般来说,您可以使用两个nodetool命令监视nodetool repair操作:

  • 压缩统计数据
  • 网络统计

修复操作有两个不同的阶段。首先,它计算节点之间的差异(要完成的修复工作),然后通过将数据流传输到适当的节点来处理这些差异。
这将检查活动的Merkle树计算:

$ nodetool compactionstats
pending tasks: 0
Active compaction remaining time :        n/a

修复流可通过以下方式进行监控:

$ nodetool netstats

事实上,TheLastPickle的Aaron Morton建议使用以下Bash脚本/命令来监视任何活动的修复流:

while true; do date; diff <(nodetool -h localhost netstats) <(sleep 5 && nodetool -h localhost netstats); done

DataStax在他们的支持论坛中有关于troubleshooting hanging repairs的帖子。如果您有任何挂起的修复流,您应该能够看到它们,并显示netstats。如果在修复过程中您的某个节点不可用,则可能发生这种情况。要监视特定的修复操作,您可以检查日志文件中是否有类似以下的条目:
[编写-/172.30.77.197] 2013-05-03 12:43:09,107 OutboundTcpConnection.java(第165行)写入到/172.30.77.197 java.net时出错。套接字异常:连接重置
请注意,修复会话也应在system.log中注明:

[repair #02fc68f0-210c-11e7-aa88-c35a9a02c19a] Starting...

[repair #02fc68f0-210c-11e7-aa88-c35a9a02c19a] Completed...
mgdq6dx1

mgdq6dx12#

当您启动修复命令时,可以使用选项--trace监视修复流:
nodetool repair --trace <key_space> <table>

wnavrhmk

wnavrhmk3#

我们还可以在Opscenter控制台的Activities下监控修复的进度。

v9tzhpje

v9tzhpje4#

如果有人还想知道如何用最新版本的Cassandra监视nodetool repair的状态,从Cassandra 4.0开始,有新的nodetool repair_admin命令来跟踪和中断修复操作。

nodetool repair_admin list

它由包含修复操作历史的新系统表system.repairs支持。

相关问题