AWS 弹性搜索。禁止/8/索引写入 (api)。无法写入索引

Posted

技术标签:

【中文标题】AWS 弹性搜索。禁止/8/索引写入 (api)。无法写入索引【英文标题】:AWS elastic-search. FORBIDDEN/8/index write (api). Unable to write to index 【发布时间】:2017-11-07 02:12:53 【问题描述】:

我正在尝试将文档列表转储到 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)];'  

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

【问题讨论】:

【参考方案1】:

此错误是 Amazon ES 服务主动阻止写入以防止集群达到红色或黄色状态。它使用index.blocks.write 来做到这一点。

两个原因是:

Low Memory

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

当 JVMMemoryPressure 指标在 5 分钟内恢复到 88% 或更低时,将禁用保护,并解除对集群的写入操作。

Low Disk Space

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

【讨论】:

【参考方案2】:

此错误表明 AWS ElasticSearch 已根据磁盘空间在您的域中放置了一个块。在 85% 时,ES 将不允许您创建任何新索引。在 90% 时,无法编写新文档。

【讨论】:

【参考方案3】:

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

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

curl -X PUT -H "内容类型:应用程序/json" 'http://localhost:9200/index_name/_settings' -d ' "index": "blocks": “写”:“假” '

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于AWS 弹性搜索。禁止/8/索引写入 (api)。无法写入索引的主要内容,如果未能解决你的问题,请参考以下文章

AWS IAM-如何禁止用户通过控制台进行更改,但允许通过CLI更改API

节点js中的REST api,用于使用弹性搜索进行全文搜索

aws cloudformation 弹性搜索堆栈

在 AWS 上将 AJAX 用于弹性搜索时出现 CORS 问题

在AWS实例中无法访问弹性搜索

没有写入时,为啥 Elasticsearch 每隔“n”秒执行一次索引?