【问题标题】:Cassandra NoHostAvailableException: All host(s) tried for query failed in ProductionCassandra NoHostAvailableException:在生产中尝试查询的所有主机都失败
【发布时间】: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


【解决方案1】:

按照 cmets 中 Olivier Michallat 的建议,通过检查 NoHostAvailableException 的错误集合解决了我的问题。对我来说,这是集群配置的协议版本。我的为空,将其设置为 3 解决了问题。

【讨论】:

    【解决方案2】:

    我的问题已通过删除/使用属性来设置或取消设置我的连接使用的自定义负载平衡 TokenAwarePolicy 并依赖默认值得到解决。

    具体来说,我试图让本地 Spring Boot 应用程序与单个 dockerized Cassandra 实例通信。

            Cluster.Builder builder = Cluster.builder()
                .addContactPoints(cassandraProperties.getHosts())
                .withPort(cassandraProperties.getPort())
                .withProtocolVersion(ProtocolVersion.V4)
                .withRetryPolicy(new LoggingRetryPolicy(DefaultRetryPolicy.INSTANCE))
                .withCredentials(cassandraProperties.getUsername(), cassandraProperties.getPassword())
                .withCodecRegistry(codecRegistry);
    
            if (loadBalanced) {
                builder.withLoadBalancingPolicy(
                    new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().withLocalDc(localDc).build()));
            }
    

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 2019-02-25
      • 1970-01-01
      • 2017-02-17
      • 2016-02-13
      • 1970-01-01
      • 2019-03-14
      • 2013-10-25
      • 2020-08-18
      相关资源
      最近更新 更多