Elasticsearchエラー:cluster_block_exception [FORBIDDEN / 12 / index読み取り専用/削除を許可(api)]、フラッドステージのディスクウォーターマークを超えました


107

ドキュメントをElasticsearchに通常どおり投稿しようとすると、次のエラーが発生します。

cluster_block_exception [FORBIDDEN/12/index read-only / allow delete (api)];

Elasticsearchログにもこのメッセージが表示されます。

flood stage disk watermark [95%] exceeded ... all indices on this node will marked read-only

あなたがこの質問をすると、私はちょうどこの問題に遭遇しました。ESは、メモリを解放することについて話し合う
Abhijith S

回答:


212

これは、Elasticsearchがディスクの空き容量が少なくなっていると判断したために発生し、読み取り専用モードになります。

デフォルトでは、Elasticsearchの決定は空きディスクスペースのパーセンテージに基づいているため、大きなディスクでは、ギガバイトの空きスペースが多くてもこれが発生する可能性があります。

フラッディングステージのウォーターマークはデフォルトで95%であるため、1TBのドライブでは少なくとも50GBの空き容量が必要です。そうしないと、Elasticsearchが読み取り専用モードになります。

洪水段階の透かしに関するドキュメントについては、https: //www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.htmlを参照してください

適切なソリューションは、コンテキストに依存します-たとえば、実稼働環境と開発環境。

解決策1:ディスク領域を解放する

ディスクの5%以上が空くように十分なディスク領域を解放すると、この問題が解決します。Elasticsearchは、十分なディスクが解放されても、自動的に読み取り専用モードを解除しません。インデックスをロック解除するには、次のようにする必要があります。

$ curl -XPUT -H "Content-Type: application/json" https://[YOUR_ELASTICSEARCH_ENDPOINT]:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

解決策2:フラッドステージの透かし設定を変更する

"cluster.routing.allocation.disk.watermark.flood_stage"設定を別のものに変更します。低いパーセンテージまたは絶対値に設定できます。これはドキュメントから設定を変更する方法の例です:

PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "100gb",
    "cluster.routing.allocation.disk.watermark.high": "50gb",
    "cluster.routing.allocation.disk.watermark.flood_stage": "10gb",
    "cluster.info.update.interval": "1m"
  }
}

繰り返しますが、これを行った後は、上のcurlコマンドを使用してインデックスのロックを解除する必要がありますが、その後、インデックスを再び読み取り専用モードにしないでください。


8
こんにちは。しかし、システムに十分な空き容量がある場合でも、このエラーが発生します。この問題を報告している可能性のある他の理由はありますか?
サンカルパティミルシナ

82.43%のディスクを使用できますが、同じ問題があります。curlコマンドを使用して修正しましたが、数日後には同じ結果になります。
manu

@SankalpaTimilsinaはあなたが答えを得ましたか、私は同じ問題に直面しています。
Malik Faiq

52

デフォルトでは、インストールされているElasticsearchは、ディスクの空き容量が5%未満になると読み取り専用モードになります。次のようなエラーが表示された場合:

Elasticsearch :: Transport :: Transport :: Errors :: Forbidden:[403] {"error":{"root_cause":[{"type": "cluster_block_exception"、 "reason": "ブロック元:[FORBIDDEN / 12 /インデックスは読み取り専用/削除を許可(api)]; "}]、" type ":" cluster_block_exception "、" reason ":"ブロック:[FORBIDDEN / 12 / index読み取り専用/削除を許可(api)]; " }、 "status":403}

または/usr/local/var/log/elasticsearch.logで次のようなログを確認できます:

[nCxquc7PTxKvs6hLkfonvg] [nCxquc7] [/ usr / local / var / lib / elasticsearch / nodes / 0] freeでフラッドステージのディスクウォーターマーク[95%]を超えました:15.3gb [4.1%]、このノードのすべてのインデックスは読み取り済みとマークされます-のみ

その後、次のコマンドを実行して修正できます。

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_cluster/settings -d '{ "transient": { "cluster.routing.allocation.disk.threshold_enabled": false } }'
curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

これは正常に動作します
Javaメイン

23
curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

から

https://techoverflow.net/2019/04/17/how-to-fix-elasticsearch-forbidden-12-index-read-only-allow-delete-api/


私は{"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [null] and no indices exist"あなたのコマンドで何かを得ていますか?
Cyril Duchon-Doris

1
ありがとう!ディスクの空き容量がなくなりました。少しスペースを空けても問題は解決しませんでした。このコマンドは私の問題を解決しました!
フレッド

これは、最新のElasticsearchバージョンの正しいソリューションです。ただし、では機能しませんでした_all。手動で各インデックスに適用する必要がありました。
ルービック

@rubikは、「各インデックスに手動で適用する」方法について言及していただけますか?私はElasticsearchを使い始めて、_allが機能しない同じ問題に直面しています。
rom

@romもちろん。単に_allインデックス名に置き換え、各インデックスに対してリクエストを繰り返します。
ルービック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.