Cassandra操作超时

Ale*_*ski 5 timeout amazon-web-services cassandra node.js

操作超时-仅收到0个响应。”,信息:“代表来自服务器的错误消息”,代码:4608,一致性:1,已接收:0,blockFor:1,isDataPresent:0,...

我一天几次尝试在我的cassandra群集上执行SELECT查询时遇到此错误。我们在m1.large aws实例上有一个3节点群集。他们大多数时候都成功,但是偶尔我们都会遇到上述错误。我们尚未投入生产,因此所有桌子都很小。我们没有几千行以上的表,并且相同的查询在其他时间也可以很好地完成。提高超时时间不是一种选择,我不认为这会解决问题(查询应该简短,错误中的查询每次都不相同)

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

And*_*ert 5

这实际上是从负责处理您的请求的 C* 服务器(也称为“协调器”)返回的错误。

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

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

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

  1. 增加您从中查询数据的键空间的复制因子。如果您的复制因子为 1,则您需要 1 个节点才能响应特定分区的查询。将 RF 增加到 3 之类的值将使您的应用程序对性能不佳的节点或出现故障的节点更具弹性。
  2. 配置您的RetryPolicy以根据您希望的行为方式重试读取。nodejs-driver 的默认设置是仅在received>时重试读取一次blockFor(在您的情况下并非如此)。
  3. 增加read_request_timeout_in_ms你的cassandra.yaml。不过,我不鼓励这样做,除非您的配置/环境/查询很差,否则 5000 毫秒应该足够了。