2017-07-25 47 views
0

我得到以下异常在我的卡桑德拉SYSTEM.LOG:卡桑德拉WriteTimeoutException例外 - 节点死亡最终

WARN [CounterMutationStage-25] 2017-07-25 13:25:35,874 AbstractLocalAwareExecutorService.java:169 - Uncaught exception on thread Thread[CounterMutationStage-25,5,main]: {} 
java.lang.RuntimeException: org.apache.cassandra.exceptions.WriteTimeoutException: Operation timed out - received only 0 responses. 
    at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2490) ~[apache-cassandra-3.9.jar:3.9] 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[na:1.8.0_112] 
    at org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$FutureTask.run(AbstractLocalAwareExecutorService.java:164) ~[apache-cassandra-3.9.jar:3.9] 
    at org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$LocalSessionFutureTask.run(AbstractLocalAwareExecutorService.java:136) [apache-cassandra-3.9.jar:3.9] 
    at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:109) [apache-cassandra-3.9.jar:3.9] 
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_112] 
Caused by: org.apache.cassandra.exceptions.WriteTimeoutException: Operation timed out - received only 0 responses. 
    at org.apache.cassandra.db.CounterMutation.grabCounterLocks(CounterMutation.java:150) ~[apache-cassandra-3.9.jar:3.9] 
    at org.apache.cassandra.db.CounterMutation.applyCounterMutation(CounterMutation.java:122) ~[apache-cassandra-3.9.jar:3.9] 
    at org.apache.cassandra.service.StorageProxy$9.runMayThrow(StorageProxy.java:1473) ~[apache-cassandra-3.9.jar:3.9] 
    at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2486) ~[apache-cassandra-3.9.jar:3.9] 
    ... 5 common frames omitted 

一旦发生这种情况,CPU下降到0%,持续一分钟左右,节点变得没有反应,但在那之后恢复。但最终,节点将完全死亡(即进程继续运行,但不再响应命令,即使关机不起作用,也不得不终止进程)。

一些更多的信息:

  • 卡桑德拉3.9
  • G1垃圾收集
  • 在Windows Server
  • 单节点2012 R2(20个内核,256 GB RAM)
  • 使用大量的柜台和柜台突变

我试过的东西:

  • 从日志中删除所有其他警告。用于对计数器批次的警告过大,重新编写代码以根本不使用批处理。这消除了警告,但不是例外问题。
  • 迁移到一个更大的机器,使用更大的堆和微调GC来确保问题不是机器压力过大。 CPU负载是< 20%。

有没有人有一个想法还有什么要做?我主要关心的是节点完全死亡。我不知道,这个异常是造成它,但它是我唯一的线索......

更新1:

更新卡桑德拉3.11和节点似乎没有现在不行了了。然而,写入超时仍然存在,节点在几分钟内无响应,但至少现在恢复。

更新2:

问题解决了(用专业顾问的帮助下)。我们节点上的光盘I/O速度非常糟糕,导致冲洗作家队列不断增加。原因未知,驱动器上的I/O速度测试(Raid 1 SSD)实际上超级棒。 将节点从Windows移到Linux(并根据http://docs.datastax.com/en/landing_page/doc/landing_page/recommendedSettings.html对其进行配置)解决了此问题。

问题的真正原因不明;可能本身就是Windows,或者只是与RAID设置有些不兼容。无论如何,Cassandra只能在Linux上进行真正的测试,并且更容易为Linux设置寻求帮助。学过的知识。

回答

1

这听起来像是一个有20个内核和256GB内存的健壮机器。 Cassandra是一个旨在水平扩展的分布式系统。尝试添加更多的商品硬件并水平扩展,而不是在单个节点上推动负载。你也可以在同一个盒子里运行Cassandra的多个节点。

至少尝试运行此框中的几个节点以从无响应扩展。大多数情况下,CPU不是Cassandra的瓶颈。它是单个节点可以执行的I/O。

  • 检查cassandra.yaml的concurrent_writes上的值,我猜根据20个内核的建议,它将是160(20 * 8)。
  • 如果可行,请尝试分离commitlog目录和数据目录存储驱动器。
  • 最好的选择是增加更多的盒子(配置可能更小)。
+0

我会接受这个答案,因为问题实际上是光盘I/O,并且您的建议非常正确,即使它没有解决我们的具体问题。 – MadDave666