常见报错

当您在使用阿里云Elasticsearch集群遇到问题时,可能在集群日志、客户端日志、命令执行结果等数据中看到各种报错信息。本文介绍常见的报错,以及产生报错的原因和解决方法。

写入Elasticsearch异常:HTTP/1.1 413 Request Entity Too Large

报错原因

Elasticsearch中设置内容的最大容量参数为http.max_content_length,该参数的默认值是100 MB,而且不建议修改,当写入的数据量超过了此值就会报错。

解决方案

调整写入数据量,每次写入请求的数据量=文档数量*单个文档的大小。仅凭文档数量可能无法准确评估写入数据量的大小,它取决于您每个文档的大小及复杂性。如果您的单个文档数据量很大,可以适当减少文档数量。一般建议每次写入请求的数据量从5 MB~15 MB开始调试,默认不能超过100 MB(详细信息请参见HTTP settings)。具体调试方案,请参见官方使用和调试批量请求文档

Elasticsearch写数据时报错:forbids automatic creation of the index

报错原因

阿里云Elasticsearch实例未开启自动创建索引功能。

解决方案

在Elasticsearch控制台的集群配置页面,静态开启自动创建索引功能,您也可以通过命令方式开启,具体操作请参见配置YML参数

主日志报错:all shards failed

报错说明

出现该报错后,集群会出现以下问题:

  • 读取请求无法从分片获得响应。

  • 由于集群或节点仍处于初始启动过程,导致无法搜索数据。

  • 分片丢失或处于恢复模式,并且集群状态为red。

报错原因

可能原因如下:

  • 节点已断开连接或者正在重新连接。

  • 正在查询的分片正在恢复中,因此不可用。

  • 磁盘损坏。

解决方案

结合监控日志判断集群状态是否健康。例如磁盘空间是否充足、索引和集群settings是否有设置一些参数导致无法分片等。如果出现节点失联或者无法分配分片的情况,需要先解决这些问题,具体操作如下:

  1. 登录Kibana控制台

  2. 查看未分配的分片。

    GET /_cluster/allocation/explain
    说明

    如果集群中没有未分配的分片,则返回error。

  3. 重新分配失败的分片。

    POST /_cluster/reroute?retry_failed=true

主日志中出现SSL/TSL相关报错如何处理?

报错原因

如果主日志中出现如下图报错,表示SSL连接中传入了明文流量。这通常发生在未使用加密通信的节点尝试连接到使用加密通信的节点时。SSL/TSL报错

解决方案

建议您按照以下方式排查:

  • 确认业务使用是否有问题。例如,在不开启HTTPS的情况下默认只能使用HTTP方式访问阿里云Elasticsearch集群,如果业务侧使用了HTTPS方式访问就会报错,此时需要在控制台开启HTTPS访问,具体操作请参见使用HTTPS协议

  • 查看主日志中打印的远程IP是否为业务侧的访问IP,建议阿里云Elasticsearch公网访问白名单根据业务需要最小化放开,不要设置0.0.0.0/0。

更多SSL/TSL的相关问题,请参见Common SSL/TLS exceptions

xpack-sql查询报错:No keyword/multi-field defined exact matches for [KeywordField]

报错原因

xpack-sql的LIKE操作使用了text类型的字段。

解决方案

xpack-sql的LIKE操作仅支持对keyword类型的字段做精确过滤,不支持text字段类型,请将字段类型改成keyword类型,详情请参见Unable to run SQL query on multi fields using Elastic Search v. 7.3SQL and multi-fields

数据备份,执行PUT _snapshot/my_backup报错:path is not accessiable on master node

报错原因

在进行数据备份时,使用的OSS Bucket是归档存储类型的,读文件前需要解冻,导致了该报错。

解决方案

目前阿里云Elasticsearch不支持将数据备份至归档存储类型的OSS Bucket中,请使用标准存储类型的Bucket,且Bucket的地域与Elasticsearch实例的地域保持一致,详细信息请参见手动备份与恢复

进入Kibana时报错:kibana did not load properly

报错原因

当Elasticsearch集群各数据节点磁盘使用率超过95%后,会触发Elasticsearch自动保护机制,自动保护机制会对Elasticsearch集群中的每个索引强制设置read_only_allow_delete属性,此时索引将无法写入数据,只能读取和删除对应索引。

解决方案

  1. 参见集群磁盘使用率过高和read_only问题的排查与处理方法,修复磁盘使用率过高的问题。

  2. 执行以下命令,将集群中所有索引的index.blocks.read_only_allow_delete属性设置为null,使集群中不再存在read_only状态的索引。

    PUT _settings
    {  
       "index.blocks.read_only_allow_delete": null
    }

使用aliyun-qos插件报错:unsupported_operation_execption

报错说明

使用aliyun-qos插件,通过apack.qos.ratelimit.enabled开启限流功能后,通过命令配置限流器时,报错:

{
   "error": {
      "root_cause": [
            {
               "type": "unsupported_operation_exception",
               "reason": "unsupported_operation_exception: only define search or bulk action for limit"
            }
         ],
         "type": "unsupported_operation_exception",
         "reason": "unsupported_operation_exception: only define search or bulk action for limit"
      },
   "status": 500
}

报错原因

插件没有升级至最新版本。

解决方案

通过GET /_cat/plugins?v命令查看插件版本。7.10版本Elasticsearch实例的插件最新版本为7.10.0_ali1.6.0.2,其他版本为<实例版本>-rc4。如果插件版本不是最新版本,您可通过以下方式处理:

  • 7.10版本Elasticsearch实例:在控制台将内核升级到1.6.0版本,具体操作请参见升级版本

  • 非7.10版本Elasticsearch实例:提交工单联系阿里云Elasticsearch技术工程师升级插件版本。升级后,需要您手动重启Elasticsearch实例生效。

重要
  • 使用aliyun-qos插件时,如果版本低于rc4,会出现unsupported_operation_exception的报错。

  • 当前仅支持升级6.7.0及以上版本的Elasticsearch实例中的aliyun-qos插件,低于6.7.0版本的Elasticsearch实例需要先将实例版本升级到6.7.0及以上,再升级插件版本。

使用Transport访问Elasticsearch的9300端口,报错:NoNodeAvailableException

报错说明

使用5.5或5.6版本的Transport Client访问阿里云Elasticsearch的9300端口,偶尔会出现NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{HVdK7Cff****\_P0c9n****}{es-cn-v1qqweee****.elasticsearch.aliyuncs.com}{172.17.XX.XX:9300}]],但是用户并没有172.17.XX.XX这个节点。

解决方案

建议您使用5.3.3版本的Transport Client来访问Elasticsearch集群。更多信息,请参见Transport Client(5.x)

7.4版本主日志报错:Unclosed object or array found或ArrayIndexOutOfBoundsException

报错原因

此报错是开源Elasticsearch 7.4版本的bug导致的,不会影响业务的进行。

解决方案

此问题已经在高版本中解决,阿里云Elasticsearch的7.4版本也已经停止售卖。如果出现此类问题,建议您退订后重新按需购买高版本的集群。退订前如果需要迁移您当前实例上的数据,请参见迁移方案选取指南选择对应的迁移方案,确保您实例上现有的数据不会丢失。

使用aliyun-knn插件的余弦向量报错:No field found for [metaData] in mapping with types

建议您按照以下方式排查:

  • 检查Elasticsearch集群版本是否符合要求。

    Elasticsearch 6.7版本的内核要求1.2及以上,Elasticsearch 7.10版本的内核要求1.4及以上,才能使用aliyun-knn插件。更多版本要求请参见使用向量检索插件(aliyun-knn)

  • 检查查询中是否存在script向量检索。script向量检索仅支持在script_score方式下使用。

  • 检查您设置的字段是否符合查询。例如,索引字段是嵌套字段,但查询时使用的是非嵌套字段类型。

使用ES的API密钥进行认证时报错:API keys not enabled in Elasticsearch

报错原因

Elasticsearch的配置中没有启用API密钥功能。

解决方案

开启HTTPS。具体操作,请参见使用HTTPS协议