【问题标题】:Cassandra NoHostAvailableException : All host(s) tried for query failedCassandra NoHostAvailableException:所有主机尝试查询失败
【发布时间】:2021-01-30 13:40:15
【问题描述】:

我们正在运行一个使用 Cassandra DB 多节点集群的 java 微服务。在写入数据时,从不同的节点随机看到以下错误:

com.datastax.driver.core.exceptions.NoHostAvailableException:所有主机尝试查询失败

已验证集群中的所有节点都可用且正在运行,并且可以相互访问。

高度赞赏任何指针。

谢谢。

【问题讨论】:

  • 您是否已确认您已通过身份验证并拥有执行查询的正确权限?在尝试使用官方 Scylla 容器创建键空间时,我刚刚在 DataGrip 中遇到了这个问题。 Scylla 是与 Cassandra 兼容的列存储,它的官方容器不应该默认启用身份验证,但是当我尝试创建密钥空间时,我遇到了 OP 的异常。查看容器的日志时,我注意到它创建了一个名为 cassandra 的超级用户,其密码为 cassandra。当我使用这些凭据时,我能够成功创建密钥空间。

标签: cassandra datastax-enterprise datastax-java-driver


【解决方案1】:

上述错误表明驱动程序无法连接到任何主机进行查询。以下可能是相同的原因。

  1. Cassandra 节点关闭 - 您已验证的情况不适用于您。

  2. 由于显示了哪些节点而导致的高流量造成的拥塞。

  3. 客户端和节点之间的网络连接出现间歇性问题,迫使驱动程序将主机标记为关闭。

【讨论】:

  • 谢谢曼尼什。但是我们已经验证了网络问题,流量也正常。集群中的所有 cassandra 节点都具有 ReleaseVersion:3.9。并且Datastax Java驱动版本是3.0,也是兼容的。还有什么可以触发这个问题
  • 长时间的 GC 暂停可能是原因。您可以在收到错误日志时检查您的 gc 日志。如果这是您必须调整 C* 节点的原因。
  • 如果我们将 gc_grace_seconds 的值从默认值减小到 0,会有帮助吗?我知道墓碑通常是较高 GC 活动的主要原因。另一种替代方法是使用 Mapper 选项过滤掉空值并设置 saveNullFields(false) 。请建议我们可以采取更多措施。
猜你喜欢
  • 2019-02-25
  • 1970-01-01
  • 2023-03-20
  • 2017-02-17
  • 2016-02-13
  • 2020-08-18
  • 2013-10-25
  • 2019-03-14
  • 2019-08-07
相关资源
最近更新 更多