在上一个主机被 Datastax Java 驱动程序关闭后,Cassandra 重新连接到下一个主机的尝试

Posted

技术标签:

【中文标题】在上一个主机被 Datastax Java 驱动程序关闭后,Cassandra 重新连接到下一个主机的尝试【英文标题】:Cassandra Re-Connection attempt to next host after previous host is down by Datastax Java Driver 【发布时间】:2018-07-16 13:17:33 【问题描述】:

Datastax Cassandra Java 驱动程序是否为 cassandra 连接到下一个可用主机提供回退机制? 例如,如果集群有 4 个 Host 节点,并且客户端应用程序连接到 Host-1。现在,当 Host-1 关闭时,是否可以提供应用程序尝试连接的机制到 Host-2,然后到 Host-3 ... 以此类推!!! 此外,1) Datastax 驱动程序提供了编写自定义重试策略 RetryPolicy(MyCustomRetryPolicy.RETRY_POLIOCY_INSTANCE); 的工具,但它会在出现错误(ReadTimeout、writeTimeout、RequestError 等)时调用,但此时,当一个节点离开时,这不会被调用。 2) 另一种方法是添加 SpeculativeExecutionPolicy withSpeculativeExecutionPolicy(new ConstantSpeculativeExecutionPolicy(10000,2)),但我不确定这是否能解决问题? cassandra的Java驱动程序是否提供了任何其他适当的机制或SpeculativeExecutionPolicy是唯一的选择?

【问题讨论】:

【参考方案1】:

Cassandra Java 驱动程序仅使用第一个节点来发现集群中的其他节点。然后它使用配置的策略连接到节点 - 默认情况下它是令牌感知/数据中心感知策略。第一部分意味着驱动程序“知道”哪个节点负责处理具有给定分区键的数据,第二部分是知道节点所在的位置。您当然可以自定义您的策略,但默认设置应该没问题。更多信息在the official docs。

如果您的情况没有发生后备,请分享更多详细信息。

【讨论】:

以上是关于在上一个主机被 Datastax Java 驱动程序关闭后,Cassandra 重新连接到下一个主机的尝试的主要内容,如果未能解决你的问题,请参考以下文章

Datastax Java 驱动程序自定义重试策略

Datastax Cassandra Java 驱动程序 @QueryParameters fetchSize

NoClassDefFoundError - Cassandra 的 datastax java 驱动程序

如何关闭数据库连接 Datastax Java 驱动程序

Cassandra:使用 DataStax Java 驱动程序选择一系列 TimeUUID

使用 datastax java 驱动程序 2.1.4 连接到 Cassandra 集群的速度太慢