客户端访问Elasticsearch FAQ

本文介绍通过客户端访问阿里云Elasticsearch方面的常见问题。

阿里云Elasticsearch API兼容开源Elasticsearch API吗?

阿里云Elasticsearch API包含Restful API和管控侧API:

  • Restful API:完全兼容开源。主要完成集群数据的变更,例如文档的增删改查、别名配置等,详细信息请参见Restful API

  • 管控侧API:阿里云Elasticsearch独有。主要完成您在阿里云Elasticsearch控制台上的操作,例如创建实例、配置白名单等,详细信息请参见API概览

使用Transport Client访问阿里云Elasticsearch,其中cluster.name怎么获取?

cluster.name就是实例ID,可在实例的基本信息页面获取,详情请参见查看实例的基本信息

使用Transport Client连接阿里云Elasticsearch时,报错NoNodeAvailableException如何处理?

使用5.5或5.6版本的Transport Client与阿里云Elasticsearch建立连接时会提示NoNodeAvailableException的错误,推荐您使用5.3.3版本。使用Transport Client,需要购买5.5或5.6版本的阿里云Elasticsearch实例(6.x及以上版本不支持),并且需要在代码中将client.transport.sniff设置为false,详情请参见Transport Client(5.x)

说明

Elasticsearch 7.0中已经弃用Transport Client,因此在实际开发中建议您使用Java REST Client,详情请参见High Level REST Client(6.3.x)High Level REST Client(6.7.x)Low Level REST Client (5.x)

客户端连接超时(Client Request Timeout),如何处理?

客户端连接超时的可能原因及解决方案如下:

可能原因

解决方案

内存不足,导致IO读写阻塞。

通过指标含义与异常处理建议,观察内存的使用情况和读写情况。如果内存和读写压力较大,建议业务侧控制优化读写。

设置超时时间过短,在服务运行时间过程中导致超时。

结合业务场景,在客户端调整ConnectTimeout(例如调整到10000)和SocketTimeout(例如调整到30000)参数值。

网络问题引发超时,出现网络波动导致超时。

本地网络问题需要您自行排查解决。

可以通过Java API访问阿里云Elasticsearch集群的9200端口吗?

可以。阿里云Elasticsearch集群的9200端口支持官方所有API,而9300端口因存在安全隐患,目前仅阿里云Elasticsearch 5.x版本集群使用5.3.3版本的Transport Client通过9300端口访问集群,6.0及以上版本不支持9300端口,仅能使用9200端口访问集群,同时阿里云Elasticsearch不支持自定义端口。

说明

由于Elasticsearch 5.5.3版本的Transport Client SDK存在bug,因此云上仅支持5.3.3版本的Transport Client SDK客户端,其次需要在连接Elasticsearch的代码中设置client.transport.sniff参数为false,详细信息请参见Transport Client(5.x)

客户端连接超时,报错Connection reset by peer,如何处理?

报错原因

Connection reset by peer报错是在客户端和集群连接意外断开后的读和写操作引起的。

排查方案

可以从以下几个方面去排查:

  • 查看集群日志和监控信息,判断集群是否存在异常。

    如果出现集群状态不健康、节点失联等问题,需要先解决这些集群层面的问题,详细信息请参见指标含义与异常处理建议

  • 判断客户端是否有网络拦截策略。

    您可以分别在用户侧、Elasticsearch服务端、SLB端抓包进行排查,如果这些都没有异常,还需要查看客户端是否有安全设备拦截。

  • 判断http-keepalive时间是否超时。

    http-keepalive是保证一个TCP连接尽可能传递多的报文,每次交互一个报文后就会更新http-keepalive时间,如果http-keepalive时间超时,意味这个这段时间client和server没有报文交互,本端会主动关闭并释放连接。

    说明

    tcp-keepalive是一种探测TCP连接状态的保活机制,TCP连接建立后如果不主动关闭,client和server没有发生异常,这个连接理论上是一直存在的。http-keepalive是保证一个TCP连接上尽可能传递更多的报文,如果http-keepalive时间内没有报文交互是会主动关闭连接的。

    如果http-keepalive时间超时,您可以增加连接请求的超时时间。例如在客户端将ConnectTimeout调整参数到10000,SocketTimeout参数调整到30000。

如果以上排查均未定位到原因,您可以在代码层面捕获异常,重试请求,结合实际场景进行分析。

Windows系统终端连接Elasticsearch时,如何安装curl命令,并通过curl命令访问集群?

  1. 参见curl官方文档,下载并安装curl命令工具。

  2. 参见通过curl命令访问与管理Elasticsearch,访问Elasticsearch集群。

阿里云Elasticsearch客户端支持使用哪些SQL查询方式?

阿里云Elasticsearch和官方Elasticsearch的功能及使用方式一致,客户端支持以下SQL查询方式: