驱动程序默认重试策略

wbrvyc0a  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(436)

我正在测试我们的cassandra集群的弹性,它是一个9节点的集群,rf=3。当我禁用一个节点的端口7000上的所有通信时,客户机将获得一个

com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency QUORUM (2 responses were required but only 1 replica responded)

原因是此主机只能部分地与其他节点通信,但随后会继续在同一主机上重试

INFO  - c.d.d.c.p.LoggingRetryPolicy -  - Retrying on read timeout on same host at consistency QUORUM (initial consistency: QUORUM, required responses: 2, received responses: 1, data retrieved: true, retries: 0)

它继续在同一主机上进行所有重试,并且从不恢复,最终请求失败。
我可以创建自定义策略,但不知道为什么它从不尝试任何其他节点?

bcs8qyzn

bcs8qyzn1#

根据您的定义,数据库将只有3个信息副本(rf=3),因此,即使您有9个节点,仲裁也将仅使用实际是数据所有者的3个节点进行评估,这是通过令牌的数量及其在节点中的分配来定义的。
在禁用该节点中的端口之前,集群是否报告为正常(换句话说, nodetool status 将所有节点报告为un Up and Normal ). 所有节点报告的延迟是否相似?如果有延迟增加的节点,查询将在收到响应之前超时。
在创建“自定义策略”之前,并且在确认所有节点都是健康的、可访问的和可用的之后,您可能希望使用较低的一致性级别(如 ANY 或者 ONE )这可以提高恢复能力和性能,同时影响准确性,或者增加复制因子,这将增加可以在其中找到数据的节点数,但带来不便的是,磁盘利用率将增加。

相关问题