cqlsh中的RPC超时 - Cassandra

flo*_*pot 11 timeout cql cassandra

SimpleTopologyStrategy和我的戒指有5个节点replication_factor=3.我使用压力工具插入了1M行.当我尝试使用cqlsh读取行计数时

SELECT  count(*) FROM  Keyspace1.Standard1 limit 1000000;
Run Code Online (Sandbox Code Playgroud)

它失败并出现错误:

请求未在rpc_timeout内完成.

它获取限制为100000.即使500000也失败.
我的所有节点都已启动.我需要增加rpc_timeout吗?

请帮忙.

Pel*_*lle 13

您收到此错误,因为请求在服务器端超时.人们应该知道,正如其他人所指出的那样,这在卡桑德拉是一项非常昂贵的行动.

不过,如果你真的想这样做,你应该更新你的/etc/cassandra/cassandra.yaml文件并更改range_request_timeout_in_ms参数.这对所有范围查询都有效.

设置40秒超时的示例:

range_request_timeout_in_ms: 40000
Run Code Online (Sandbox Code Playgroud)

您可能还需要在客户端进行调整.当cqlsh用作客户端时,这可以通过创建/更新cqlsh的配置文件来完成~/.cassandra/cqlshrc,并将client_timeout参数添加到该connection部分.

设置40秒超时的示例:

[connection]
client_timeout=40
Run Code Online (Sandbox Code Playgroud)


Ric*_*ard 6

读取1M行需要很长时间,这可能是它超时的原因.你不应该使用像这样的计数,它非常昂贵,因为它必须读取所有数据.如果您需要计算大量物品,请使用Cassandra计数器.

您还应该检查您的Cassandra日志以确认没有任何其他问题 - 有时Cassandra中的例外会导致客户端超时.