节点移动后 Cassandra nodejs 驱动程序超时

Cassandra nodejs driver time out after a node moves

我们在集群上使用 vnode。

我注意到当节点的令牌 space 发生变化时(自动在 vnodes 上,在添加新节点后的修复或清理期间),datastax nodejs 驱动程序得到很多 "Operation timed out - received only X responses"几分钟。

我尝试使用 ONE 和 LOCAL_QUORUM 一致性。

我想这是因为协调器在移动后没有击中正确的节点。这似乎是一种合乎逻辑的行为(数据已移动),但我们确实想解决这个特定问题。

你们建议我们应该怎么做才能避免这种情况?有自定义重试策略?缓存?改变一致性 ?

行为示例

当我们看到这个时:

4/7/2016, 10:43am   Info    Host 172.31.34.155 moved from '8185241953623605265' to '-1108852503760494577'

我们看到了其中的一个峰值:

{
  "message":"Operation timed out - received only 0 responses.",
  "info":"Represents an error message from the server",
  "code":4608,
  "consistencies":1,
  "received":0,
  "blockFor":1,
  "isDataPresent":0,
  "coordinator":"172.31.34.155:9042",
  "query":"SELECT foo FROM foo_bar LIMIT 10"
}

I suppose this is due to the coordinator not hitting the right node just after the move. This seems to be a logical behavior (data was moved) but we really want to address this particular issue.

事实上,当添加新节点时,令牌范围会发生移动,但 Cassandra 仍然可以使用 old 令牌范围为读取请求提供服务,直到完全扩展完成。所以你面临的行为非常可疑。

如果您可以重现此错误,请激活查询跟踪以缩小问题范围。

该错误也可能与负载过重且回复速度不够快的节点有关