我安装了Solr的3节点Cassandra集群设置(复制设置为2),每个节点都有RHEL,32 GB Ram,1 TB HDD和DSE 4.8.3。我的节点上发生了很多写操作,我的Web应用程序也从我的节点读取。
Cassandra.NoHostAvailableException:在Cassandra的Cassandra.Tasks.TaskHelper.WaitToComplete(任务任务,Int32超时)中,没有可用于查询的主机(尝试:' node-ip':9042)。在Cassandra.Cluster.Init()的Cassandra.ControlConnection.Init()中的Tasks.TaskHelper.WaitToComplete [T](任务``1任务,Int32超时)
但是当我检查OpsCenter时,没有一个节点关闭。所有节点状态显示完全正常。这可能是司机的问题吗?之前我使用的是从nuget安装的Cassandra C#驱动程序版本2.5.0,但现在我甚至更新到版本3.0.3仍然存在这个错误。
对此有任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:0)
如果您还没有这样做,您可能希望通过在所有节点上运行nodetool -h 192.168.XXX.XXX setlogginglevel org.apache.cassandra DEBUG
来查看将日志记录级别设置为默认值
您的第一个问题很可能是OutOfMemory异常。
对于您的第二个问题,问题很可能是您有非常长的GC暂停。拖尾/var/log/cassandra/debug.log
或/var/log/cassandra/system.log
可能会给您提示,但除非您仔细查看时间戳,否则通常不会显示问题。解决此问题的最佳方法是确保在jvm.options配置中启用了GC日志记录,然后在记录暂停时间时关闭gc日志:
grep 'Total time for which application threads were stopped:' /var/log/cassandra/gc.log.1 | less
Unexpected exception during request; channel = [....] java.io.IOException: Error while read (....): Connection reset by peer
错误通常是节点间超时。即,协调器超时等待来自另一个节点的响应,并发送TCP RST数据包以关闭连接。