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