Cassandra NoHostAvailableException:在生产中尝试查询的所有主机都失败了

时间:2015-07-29 15:55:53

标签: java cassandra datastax-java-driver

我们有10个Cassandra节点正在运行Cassandra-2.1.8。我们最近升级到2.1.8版本。以前我们只使用3个运行Cassandra-2.1.2的节点。首先,我们将最初的3个节点从2.1.2升级到2.1.8(遵循Upgrading Cassandra中所述的过程)。然后我们在集群中添加了7个运行Cassandra-2.1.8的节点。然后我们启动了客户端程序。前几个小时一切正常,但几个小时后,我们在客户端程序日志中看到了一些错误,如

Thread-0 [29/07/15 17:41:23.356] ERROR  com.cleartrail.entityprofiling.engine.InterpretationWriter - Error:com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: [/172.50.33.161:9041, /172.50.33.162:9041, /172.50.33.95:9041, /172.50.33.96:9041, /172.50.33.165:9041, /172.50.33.166:9041, /172.50.33.163:9041, /172.50.33.164:9041, /172.50.33.42:9041, /172.50.33.167:9041] - use getErrors() for details)
       at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:65)
       at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:259)
       at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:175)
       at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:52)
       at com.cleartrail.entityprofiling.engine.InterpretationWriter.WriteInterpretation(InterpretationWriter.java:430)
       at com.cleartrail.entityprofiling.engine.Profiler.buildProfile(Profiler.java:1042)
       at com.cleartrail.messageconsumer.consumer.KafkaConsumer.run(KafkaConsumer.java:336)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: [/172.50.33.161:9041, /172.50.33.162:9041, /172.50.33.95:9041, /172.50.33.96:9041, /172.50.33.165:9041, /172.50.33.166:9041, /172.50.33.163:9041, /172.50.33.164:9041, /172.50.33.42:9041, /172.50.33.167:9041] - use getErrors() for details)
       at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:102)
       at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:176)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
       at java.lang.Thread.run(Thread.java:745)

现在,我仔细检查了防火墙(如少数帖子中所建议的),端口,客户端和节点的超时,它们都是正确的。

我也没有在任何地方关闭连接。我正在使用批量大小为1000的批量查询,查询是更新查询,更新我的表中有三列的计数器

entity,twfwv,cvalue

其中entity和twfwv列是文本和主键,cvalue是计数器列。

我甚至重新启动了所有节点(因为当我遇到相同的异常时,这个技巧在我的开发环境中帮助了我)但它没有帮助。请在这里建议可能存在的问题。

2 个答案:

答案 0 :(得分:3)

我的问题已通过在评论中按照Olivier Michallat的建议检查NoHostAvailableException的错误集合来解决。对我来说,它是群集配置的协议版本。我是空的,把它设置为3解决问题。

答案 1 :(得分:1)

我的问题已解决,方法是删除/使用属性来设置或取消设置我的连接正在使用的自定义负载平衡TokenAwarePolicy,并依靠默认设置。

具体来说,我试图让本地spring boot应用程序与单个dockerized Cassandra实例进行对话。

<div id="dupHeader">DupHeader</div>
<div id="wrapper">
  <header>
    <div id="mainHeader">MainHeader</div>
  </header>
  <main>
    Main
  </main>
  <footer>
    Footer
  </footer>
</div>