AWS弹性搜索.FORBIDDEN/8/index write(api).无法写入索引

paa*_*chi 30 amazon-web-services elasticsearch

我正在尝试将文档列表转储到AWS弹性搜索实例.它运行正常.然后,突然间它开始抛出这个错误:

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

我在论坛上查了一下.他们中的大多数人都认为这是一个JVM内存问题.如果它超过92%,AWS将停止对集群/索引的任何写入.但是,当我检查JVM内存时,它显示低于92%.我在这里遗失了什么?

谢谢.

gon*_*lez 57

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

原因有两个:

记忆不足

当JVMMemoryPressure指标超过92%持续30分钟时,Amazon ES会触发保护机制并阻止所有写入操作,以防止群集达到红色状态.启用保护后,写入操作将失败并出现ClusterBlockException错误,无法创建新索引,并抛出IndexCreateBlockException错误.

当JVMMemoryPressure指标在五分钟内恢复到88%或更低时,将禁用保护,并取消阻止对群集的写入操作.

磁盘空间不足

Elasticsearch的默认"低水印"为85%,这意味着一旦磁盘使用率超过85%,Elasticsearch就不再为该节点分配分片.Elasticsearch还有一个90%的默认"高水印",此时它会尝试将分片重定位到其他节点.


小智 9

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


小智 8

ES 可以在翻转期间或磁盘空间或内存不足时在索引上应用写入块。

为了阻止这些错误,您需要通过设置来删除索引上的写入index.blocks.writefalse

curl -X PUT -H "Content-Type: application/json" \
'http://localhost:9200/{index_name}/_settings' \
  -d '{ "index": { "blocks": { "write": "false" } } }'
Run Code Online (Sandbox Code Playgroud)


mat*_*ieu 5

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

PUT /my_index/_settings
{
  "index.blocks.read_only_allow_delete": null,
  "index.blocks.write": null
}
Run Code Online (Sandbox Code Playgroud)

ES版本7.15