如何解决 OpenSearch Service 的连接和套接字超时问题?
当我尝试连接到 Amazon OpenSearch Service 时,我的客户端应用程序出现连接超时或套接字错误。
解决方法
对超时问题进行故障排除
执行以下操作:
- 激活 OpenSearch Service 索引的慢速日志,以识别需要很长时间才能完成且必须优化的查询。有关详细信息,请参阅 Viewing OpenSearch Service slow logs(查看 OpenSearch Service 慢速日志)。
- 使用较小的查询,以减少请求中的数据量和完成请求所需的时间。
- 使用较大的 Amazon Elastic Compute Cloud (Amazon EC2) 实例类型。有关详细信息,请参阅选择实例类型并进行测试和 OpenSearch Service 中支持的实例类型。
- 配置指数回退和重试机制,以便您的应用程序能够重试超时请求。
- 使用批量请求而非单个请求,以减少集群的开销。
- 使用 Profile API 调试工具获取详细的超时信息。有关详细信息,请参阅 OpenSearch 网站上的 Profile API。
对“Connection timed out”错误进行故障排除
如果您的连接超时,您将收到一条类似于以下示例的错误消息:
“curl: (7) Failed to connect to vpc-acbdefxyz.us-east-1.es.amazonaws.com port 443: Connection timed out
curl: (28) Operation timed out after 1001 milliseconds with 0 out of 0 bytes received”
根据您使用的域类型,执行以下故障排除操作。
公共域
当客户端具备互联网连接或指向互联网的路由时,可通过互联网访问公共域。如果客户端不具备互联网连接或指向互联网的路由,则当您运行 telnet 或 curl 命令时,可能会收到以下输出:
Trying xyz.xyz.xyz.xyz... telnet: connect to address xyz.xyz.xyz.xyz: Connection timed out
-或-
* Trying xyz.xyz.xyz.xyz:443... * connect to xyz.xyz.xyz.xyz port 443 failed: Operation timed out * Failed to connect to search-domain-name-someid.aws-region.es.amazonaws.com port 443 after 75243 ms: Couldn't connect to server * Closing connection 0 curl: (28) Failed to connect to search-domain-name-someid.aws-region.es.amazonaws.com port 443 after 75243 ms: Couldn't connect to server
要解决此问题,请确保客户端具备指向互联网的路由,且不会阻止向搜索端点发出的出站请求。
要测试您的连接,请运行以下命令:
telnet search-domain-name-someid.aws-region.es.amazonaws.com 443
**注意:**请将 search-domain-name-someid 替换为您的域名,将 aws-region 替换为您的 AWS 区域。
搜索端点返回的成功响应示例:
Trying xyz.xyz.xyz.xyz... Connected to search-domain-name-someid.aws-region.es.amazonaws.com. Escape character is '^]'.
VPC 内的域
对于您在虚拟私有云 (VPC) 内创建的 OpenSearch Service 域,VPC 中的每个数据节点都有一个弹性网络接口。这些网络接口会将网络流量转发到您的域。
要检查网络接口与您的域之间的连接,请完成以下步骤:
-
运行以下命令之一,以获取您的 VPC 中的网络接口 IP 地址:
nslookup -q=A vpc-domain-name-id.aws-region.es.amazonaws.com-或-
dig +short vpc-domain-name-id.aws-region.es.amazonaws.com**注意:**请将 domain-name-id 替换为您的域名,将 aws-region 替换为您的区域。
在输出中,记下网络接口 IP 地址。 -
要测试连接,请对每个数据节点 IP 地址运行以下命令之一:
telnet ip-address 443-或-
curl -v telnet://ip-address:443**注意:**请将 ip-address 替换为网络接口 IP 地址。
超时响应示例:Trying xyz.xyz.xyz.xyz...telnet: connect to address xyz.xyz.xyz.xyz: Connection timed out成功响应示例:
Trying xyz.xyz.xyz.xyz...Connected to xyz.xyz.xyz.xyz. Escape character is '^]'. -
如果连接超时,请确认您的 VPC 的安全组、路由表和网络访问控制列表(网络 ACL)是否允许访问该域。如果您可以连接到某些网络接口,但连接其他网络接口时超时,请创建一个 AWS Support 工单。
**注意:**您无法从 VPC 外部访问您的 OpenSearch Service 域。有关详细信息,请参阅在 VPC 中启动您的 OpenSearch Service 域。
对“HTTP 504 gateway timeout”错误进行故障排除
负载均衡器会将入站流量分发到数据节点。如果 OpenSearch Service 请求未在空闲超时时间内返回确认信息,则负载均衡器会关闭该 TCP 连接。因此,您会收到一条类似于以下示例的错误消息:
“error msg: org.elasticsearch.client.ResponseException:
method[POST], host[https: //acbdefjhxyz.eu-central-1.es.amazonaws.com:443],
URI [/eks*/_search?typed_keys=true],status line [HTTP/1.1 504 Gateway Time-out]”
通常,当 OpenSearch Service 接收过多同步请求,或请求较复杂时,将会出现“HTTP 504 Gateway timeout”错误。该错误并不一定表示集群中存在问题。有关原因和故障排除步骤的详细信息,请参阅 HTTP 504: 网关超时。
对“SocketTimeoutException”错误进行故障排除
当客户端发送过多请求或复杂请求时,通常会发生套接字超时错误。OpenSearch Service 域可能会出现资源使用率过高,且客户端响应延迟的情况。错误消息示例:
“j.net.SocketTimeoutException: 30,000 milliseconds timeout on connection http-outgoing-5083 [ACTIVE]
java.net.SocketTimeoutException: Read timed out
Caused by: java.net.SocketTimeoutException: Read timed out”
要解决此问题,请执行以下操作:
- 调整集群的超时值。有关详细信息,请参阅 OpenSearch 网站上的 Search settings(搜索设置)。
- 优化您的查询。
- 扩展您的 OpenSearch Service 域,以满足请求需求。
相关信息
如何解决 OpenSearch Service 集群中的搜索延迟峰值问题?
- 语言
- 中文 (简体)
