本文介绍通过客户端访问阿里云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命令访问集群?
参见curl官方文档,下载并安装curl命令工具。
参见通过curl命令访问与管理Elasticsearch,访问Elasticsearch集群。
阿里云Elasticsearch客户端支持使用哪些SQL查询方式?
阿里云Elasticsearch和官方Elasticsearch的功能及使用方式一致,客户端支持以下SQL查询方式:
Elasticsearch 6.3版本开始支持X-Pack SQL语言,客户端支持的SQL查询方式包括SQL REST API、SQL Translate API和SQL JDBC驱动等,客户端支持的更多SQL查询方式请参见SQL Client Applications。
X-Pack SQL查询方式。使用Elastic官方提供的x-pack-sql插件,具体信息请参见sql-search-api。
第三方SQL插件。例如开源elasticsearch-sql,建议您参考第三方开源插件相关文档。