我正在尝试将文档列表转储到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%。我在这里错过了什么?
感谢。
答案 0 :(得分:38)
此错误是Amazon ES服务主动阻止写入以保护群集不会达到红色或黄色状态。它使用index.blocks.write
执行此操作。
原因有二:
<强> Low Memory 强>
当JVMMemoryPressure指标超过92%30分钟时,Amazon ES会触发保护机制并阻止所有写入操作,以防止群集达到红色状态。启用保护后,写入操作将失败并出现ClusterBlockException错误,无法创建新索引,并抛出IndexCreateBlockException错误。
当JVMMemoryPressure指标在五分钟内恢复到88%或更低时,将禁用保护,并取消阻止对群集的写入操作。
<强> Low Disk Space 强>
Elasticsearch有一个默认的&#34;低水印&#34; 85%,这意味着一旦磁盘使用率超过85%,Elasticsearch就不再为该节点分配分片。 Elasticsearch还有一个默认的&#34;高水印&#34; 90%,此时它会尝试将分片重新定位到其他节点。
答案 1 :(得分:8)
此错误表示AWS ElasticSearch已根据磁盘空间在您的域上放置了一个块。在85%时,ES不允许您创建任何新索引。在90%时,不能写入新文件。
答案 2 :(得分:4)
ES 可以在翻转期间在索引上应用写入块,或者磁盘空间或内存不足。
为了阻止这些错误,您需要通过将 index.blocks.write
设置为 false
来删除索引上的写入块
curl -X PUT -H "Content-Type: application/json" 'http://localhost:9200/{index_name}/_settings' -d '{ "index": { "blocks": { "write": "false" } } } '
答案 3 :(得分:1)
如果您尝试写入的索引已标记为只读,也会发生这种情况。我遇到过这种情况是由于索引状态管理配置错误导致一周索引在一天后被移动到温暖状态。