1. ホーム
  2. エラスチックサーチ

[解決済み】Elasticsearchエラー:cluster_block_exception [FORBIDDEN/12/index read-only / allow delete (api)], flood stage disk watermark exceeded.

2022-04-02 23:17:59

質問内容

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

解決方法は?

これは、Elasticsearchがディスクの空き容量が少なくなってきたと判断し、自分自身を読み取り専用モードにした場合に起こります。

デフォルトでは、Elasticsearchの判断は 割合 であるため、大きなディスクでは、何ギガバイトの空き容量があっても、このようなことが起こり得ます。

洪水時のウォーターマークはデフォルトで95%なので、1TBのドライブの場合、少なくとも50GBの空き容量が必要です。

フラッドステージウォーターマークに関するドキュメントを参照してください。 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コマンドでインデックスのロックを解除する必要がありますが、その後は再び読み取り専用モードになることはありません。