AWSElasticSearch,禁止/8/索引写入(API),无法写入索引

ymdaylpp  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(5)|浏览(456)

我正在尝试将文档列表转储到AWSElasticSearch示例。它运行得很好。然后,它突然开始抛出这个错误:

{ _index: '<my index name>',
  _type: 'type',
  _id: 'record id',
  status: 403,
  error: 
   { type: 'cluster_block_exception',
     reason: 'blocked by: [FORBIDDEN/8/index write (api)];' } }

我查过论坛了。他们中的大多数人说这是JVM内存问题。如果使用率超过92%,AWS将停止对群集/索引的任何写入。然而,当我检查JVM内存时,它显示不到92%。我是不是漏掉了什么?

sz81bmfz

sz81bmfz1#

此错误是Amazon ES服务主动阻止写入,以保护群集不会达到红色或黄色状态。它使用index.blocks.write完成此操作。

两个原因是:

内存不足

当JVMMory压力指标在30分钟内超过92%时,Amazon ES会触发保护机制并阻止所有写操作,以防止集群进入红色状态。当保护开启时,写入操作失败,并出现ClusterBlockException错误,无法创建新索引,并引发IndexCreateBlockException错误。

当JVMM一带压指标在5分钟内恢复到88%或更低时,保护被禁用,对集群的写操作被解锁。

磁盘空间不足

ElasticSearch的默认“低水位线”为85%,这意味着一旦磁盘使用率超过85%,Elasticearch就不再为该节点分配碎片。ElasticSearch的默认“高水位线”为90%,此时它会尝试将碎片重新定位到其他节点。

falq053o

falq053o2#

此错误表示AWS ElasticSearch已根据磁盘空间在您的域上放置了块。在85%时,ES将不允许创建任何新索引。为90%时,不能写入任何新文档。

jgwigjjp

jgwigjjp3#

ES可能在转存期间对索引应用写入块,或者磁盘空间或内存不足。

为了停止这些错误,您需要通过将index.blocks.write设置为false来删除索引上的写入块

curl -X PUT -H "Content-Type: application/json" 
'http://localhost:9200/{index_name}/_settings' 
  -d '{ "index": { "blocks": { "write": "false" } } }'
sd2nnvve

sd2nnvve4#

对于我来说,接受的解决方案还不够,我还必须删除index.blocks.read_only_allow_delete

PUT /my_index/_settings
{
  "index.blocks.read_only_allow_delete": null,
  "index.blocks.write": null
}

ES版本7.15

dnph8jn4

dnph8jn45#

如果您尝试写入的索引已被标记为只读,也可能发生这种情况。我遇到过这种情况,是因为索引状态管理配置错误,导致每周的索引在一天后被移到温暖状态。

相关问题