【发布时间】:2023-03-20 07:28:01
【问题描述】:
我们有 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 的批量查询,查询是更新查询,更新我的表中的三列计数器
实体, twfwv, cvalue
entity 和 twfwv 列是文本,主键和 cvalue 是计数器列。
我什至重新启动了所有节点(因为当我遇到同样的异常时,这个技巧在我的开发环境中帮助了我)但它没有帮助。请在这里提出可能的问题。
【问题讨论】:
-
NoHostAvailableException是一个通用错误,表示驱动程序尝试的所有节点都失败了。查看各个错误是什么会很有帮助,因为您需要在代码中捕获异常并检查getErrors()字段。在旁注中,您使用的是哪个驱动程序版本?最新版本应在主消息中显示前 3 个错误。 -
我使用的是 com.datastax.cassandra cassandra-driver-core 2.1.2 版本。此外,我将尝试通过 getErrors() 方法获取确切的错误。一旦我得到它,我会发布输出。
-
错误信息在 2.1.4 中得到了改进(票证:JAVA-409)。最新版本是 2.1.7.1。
-
是的,我升级了我的客户端版本,将只使用 2.1.7.1。感谢您的更新。
标签: java cassandra datastax-java-driver