我刚刚继承了一个系统,该系统具有3个节点,其中一个数据中心中的2个具有2的复制因子,而另一个数据中心中的1个具有1的复制因子。该系统从Cassandra 3.9升级到Cassandra 3.11.3。自升级以来,cqlsh中的所有查询均返回错误
ReadTimeout: Error from server: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 2, 'consistency': 'LOCAL_QUORUM'}
谁能建议可能导致此问题的原因,或者我应该在哪里寻找问题的原因?
编辑: 我以1的一致性重试了查询,但仍然收到错误
ReadTimeout: Error from server: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}
答案 0 :(得分:0)
评论时间过长...
可能是由某些原因引起的。
1-最大的分区有多大?我将通过以下检查:
bin/nodetool tablestats yourKeyspaceName.ablog | grep "partition maximum"
如果返回的结果是两位数的GB范围,则您有麻烦。
2-是否有墓碑?您可以使用类似的命令进行检查:
bin/nodetool tablestats yourKeyspaceName.ablog | grep "tombstones"
如果返回3或4位数字,则可能是个问题。
3-降级到3.11.2 。 3.11.2和3.11.3使用相同的SSTable格式。这只是关闭二进制文件的问题。下载/卸载3.11.2,将conf dir从3.11.3目录移入,应该没问题。
我只建议这样做,因为您可能会遇到CASSANDRA-14672。
4-LOCAL_QUORUM w / RF = 2 正如我在评论中所提到的,在LOCAL_QUORUM处以RF <3进行查询与在ALL处进行查询没有什么不同。 Cassandra计算定额(多数)如下:
QUORUM =(RF / 2)+ 1 =(2/2)+ 1 = 2(副本需要响应)
严重的是,您这样做并没有获得任何好处。只有当RF等于或大于3时,才有意义:
QUORUM =(RF / 2)+ 1 =(3/2)+ 1 = 2(副本需要响应)
实际上,在RF = 2的QUORUM查询会伤害您,因为您不能容忍单个节点出现故障。