环境
我们在Red Hat 6.5上运行了以下Cassandra集群(版本2.0.5)的数据中心:
创建KEYSPACE的脚本如下:
CREATE KEYSPACE OUR_STUFF WITH replication = {'class':'NetworkTopologyStrategy', 'DC1':5, 'DC2':3};
我们没有任何其他密钥空间(当然除了system_auth)
我们使用LOCAL_QUORUM
选项始终向一个DC写入。
我们在DC1和DC2之间存在网络连接问题,它们每天都会发生,理论上连接可能会被打破数天/周。
对于测试建议我们加载到集群~50 GB的数据。
问题
主要问题是命令:节点工具修复通常会挂起并且可能需要几个小时 - 使用par选项或多或少3个小时,没有par选项6个小时。 此外,在过去的两周内,节点工具修复命令挂起,并且超过一天没有任何事情发生。我们在日志文件中找不到任何错误。我们不会将更多数据加载到集群中。 Cassandra建议每个节点每10天运行一次节点工具修复,并且不应该运行多个修复。但我们无法找到以下问题的答案:
答案 0 :(得分:4)
如何检查修复命令的状态?
查看日志(以及修复命令本身的输出)将根据发生的情况告诉您修复的状态。 nodetool netstats
和nodetool compactionstats
也会告诉您哪些操作正在等待处理。
如果修复命令挂起,我们该怎么办?
重新启动其中一个节点是清除修复的最简单方法。
我们应该在日志文件中查看什么是错误的?
查看修复会话日志,查看已启动的会话,并在节点之间发送消息。如果您遇到“网络问题”,很可能会导致您的问题。如果网络出现问题,您很可能希望设置streaming_socket_timeout_in_ms以使修复流重新启动https://issues.apache.org/jira/browse/CASSANDRA-3838
如何避免并行运行2个修复命令?
您可以使用JMX检查是否已经在运行维修。
最重要的一个(上面总结):如何避免nodetool修复命令出现问题?
修复您的网络:/如果您的网络不可靠,修复也将变得不可靠,因为它确实需要使用网络......