在上一个主机被 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 Cassandra Java 驱动程序 @QueryParameters fetchSize
NoClassDefFoundError - Cassandra 的 datastax java 驱动程序