我有一个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修复”是否已完成?
4条答案
按热度按时间14ifxucb1#
一般来说,您可以使用两个nodetool命令监视
nodetool repair
操作:修复操作有两个不同的阶段。首先,它计算节点之间的差异(要完成的修复工作),然后通过将数据流传输到适当的节点来处理这些差异。
这将检查活动的Merkle树计算:
修复流可通过以下方式进行监控:
事实上,TheLastPickle的Aaron Morton建议使用以下Bash脚本/命令来监视任何活动的修复流:
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中注明:
mgdq6dx12#
当您启动修复命令时,可以使用选项--trace监视修复流:
nodetool repair --trace <key_space> <table>
wnavrhmk3#
我们还可以在Opscenter控制台的Activities下监控修复的进度。
v9tzhpje4#
如果有人还想知道如何用最新版本的Cassandra监视
nodetool repair
的状态,从Cassandra 4.0开始,有新的nodetool repair_admin
命令来跟踪和中断修复操作。它由包含修复操作历史的新系统表
system.repairs
支持。