如何避免“ConnectionShutdown('标头 CRC 不匹配')”?

问题描述 投票:0回答:1

我正在使用 Datastax 的 python 驱动程序来提交并发请求,如下所示:

concurrent.execute_concurrent(...concurrency=50)

提交的请求总数在200左右,有些结果集有数千行。

我偶尔会遇到以下错误:

exception while fetching results ('Unable to complete the operation against any hosts', {\
  <Host: 127.0.0.1:9043 us-east>: ConnectionShutdown('CRC mismatch on header fc3b22. Received 85", computed 67cd61.'), \
  <Host: 10.0.0.235:9042 us-east>: ConnectionException('Host has been marked down or removed')})

如何避免这个错误?我怀疑这是由于通过网络传输大量数据而发生的,但无法查明确切的根本原因。什么是安全并发级别?

  • 驱动程序版本:3.29.1

  • cassandra 版本:cqlsh 6.1.0 |卡桑德拉 4.1.4 | CQL 规范 3.4.6 |本机协议 v5]

  • 我尝试使用不同级别的并发性 - 我需要将其设置为至少 50,否则查询需要很长时间才能完成执行。

  • nodetool状态显示所有节点均已启动

  • 优化了我的查询,以便在每个查询中指定准确的分区键 - 它们都不在分区上使用“IN”运算符。

  • 使用准备好的语句

cassandra datastax-python-driver
1个回答
0
投票

在我看来,你实际上有两个不同的问题。

第一个是您有一个节点配置为侦听

localhost
上的客户端连接:

... <Host: 127.0.0.1:9043 us-east>: ConnectionShutdown('CRC mismatch on header fc3b22. Received 85", computed 67cd61.') ...

除非您的应用程序与 Cassandra 节点托管在同一服务器上,否则切勿将 CQL 端口绑定到

localhost
。相反,您应该将节点配置为侦听可从应用程序路由的 IP 地址上的连接。

对于第二个问题,指示为:

... <Host: 10.0.0.235:9042 us-east>: ConnectionException('Host has been marked down or removed') ...

客户端无法连接到主机,因为它已被“标记为down”。驱动程序的

ConvictionPolicy
决定何时应将节点因故障而标记为“关闭”。

节点被标记为“关闭”的最常见原因是当它无响应或不可用时,通常是因为它过载并且不再响应新请求。在您的情况下,节点

10.0.0.235
可能占用了所有流量,因此没有响应,因为其他节点无法访问。

检查另一个节点的配置并确保它正在接受来自客户端的请求。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.