我有两个dc集群,其中一个dc从Cassandra 2.2.19升级到3.11.13。目前,我注意到 Cassandra 3.x DC 升级后报告了 cql 超时。版本 2.x 上的另一个 dc 没有此问题。请问 Cassandra 3.11.13 版本是否需要比以前的设置增加超时值?以下是当前配置的超时值,必须做什么才能解决此问题?
错误:
ReadTimeout:来自服务器的错误:code=1200 [协调器节点等待副本节点响应超时] message="操作超时 - 仅收到 3 个响应。"信息={'received_responses': 3, 'required_responses': 4, 'consistency': 'QUORUM'}
Casssandra.yaml 配置文件中的超时值:
读取请求超时时间:5000 range_request_timeout_in_ms:10000 write_request_timeout_in_ms: 10000 counter_write_request_timeout_in_ms:5000 cas_contention_timeout_in_ms:1000 截断请求超时时间:60000 request_timeout_in_ms: 10000 cross_node_timeout: false
这里可能的问题是 Cassandra 2.2 和 3.11 使用不同的默认版本的 CQL 二进制协议。我怀疑发生了以下两件事之一:
QUORUM
。如果应用程序协商的二进制协议版本对于 3.11 而言太低,则它无法到达这些节点。在查看上面的消息时,我怀疑它是#2。确保应用程序指定本地 DC,并在
LOCAL_QUORUM
而不是 QUORUM
运行查询。和/或强制使用适用于 Cassandra 2.2 和 Cassandra 3.11 的协议版本,如此页面所示。
这还取决于您使用的驱动程序版本。我的猜测是协议 v2 正在协商中,而 Cassandra 3.11 不支持该协议。
另一个潜在问题是您的应用程序仍在使用 Thrift。在这种情况下,请记住 Cassandra 3.11 默认 Thrift 为“禁用”,因此您需要启用它。