卡桑德拉的行动超时了

时间:2016-07-06 18:49:47

标签: node.js amazon-web-services cassandra timeout

操作超时 - 仅收到0条回复。',   info:'表示来自服务器的错误消息',   代码:4608,   一致性:1,   收到:0,   blockFor:1,   isDataPresent:0,   ...

我每天都会多次尝试在我的cassandra集群上执行SELECT查询。我们在m1.large aws实例上有一个3节点集群。他们大部分时间都取得了成功,但每隔一段时间我们就会遇到上述错误。我们还没有投入生产,所以所有的桌子都很小。我们没有几千行的任何表,并且相同的查询在其他时间完成。提高超时时间不是一种选择,我不相信它会解决问题(查询应该很短,错误中的查询每次都不一样)

这可能是某些连接在节点或网络问题之间过时了吗?测试这些的最佳方法是什么?我也只在我的客户端看到这个错误,在cassandra日志中我应该看到这个吗?

1 个答案:

答案 0 :(得分:2)

这实际上是一个从负责处理您的请求的C *服务器返回的错误(又称'协调员')。

看起来你正在查询一致性等级的“一个人”。因此,只有1个保存数据的副本需要响应服务器上cassandra.yaml文件中配置的read_request_timeout_in_ms内的协调器(默认为5秒),但在该时间段内没有响应副本。

超时可能发生,您的应用程序应该根据您的偏好准备处理它们(要么完全失败,要么重试,增加复制因子以降低其可能性等等)

以下是您应该考虑的一些事项:

  1. 增加要查询数据的键空间的复制因子。如果复制因子为1,则依赖于1个节点可用于响应特定分区的查询。将您的RF增加到3等级将使您的应用程序对性能低下的节点或节点更具弹性。
  2. 根据您希望的行为方式,将RetryPolicy配置为重试读取。 nodejs-driver的默认设置是仅重试一次读取,仅当received> blockFor(在您的情况下,它不是')。
  3. 在cassandra.yaml中增加read_request_timeout_in_ms。我会劝阻这一点,除非你的配置/环境/查询不好,否则5000毫秒应该绰绰有余。