Elasticsearch-Fehler: cluster_block_exception [FORBIDDEN / 12 / Index schreibgeschützt / Löschen zulassen (API)], Flood Stage Disk-Wasserzeichen überschritten

107

Beim Versuch, Dokumente wie gewohnt in Elasticsearch zu veröffentlichen, wird folgende Fehlermeldung angezeigt:

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

Ich sehe diese Meldung auch in den Elasticsearch-Protokollen:

flood stage disk watermark [95%] exceeded ... all indices on this node will marked read-only
Sean Hammond
quelle
Ich bin gerade auf dieses Problem gestoßen, als Sie diese Frage gestellt haben. ES diskutieren sagen,
Freiheit freizugeben

Antworten:

212

Dies ist der Fall, wenn Elasticsearch der Meinung ist, dass der Speicherplatz auf der Festplatte knapp wird, sodass er sich in den schreibgeschützten Modus versetzt.

Standardmäßig basiert die Entscheidung von Elasticsearch auf dem Prozentsatz des freien Speicherplatzes. Bei großen Festplatten kann dies auch dann passieren, wenn Sie über viele Gigabyte freien Speicherplatz verfügen.

Das Wasserzeichen für die Flutphase beträgt standardmäßig 95%. Auf einem 1-TB-Laufwerk benötigen Sie mindestens 50 GB freien Speicherplatz. Andernfalls wird Elasticsearch in den schreibgeschützten Modus versetzt.

Dokumente zum Wasserzeichen der Flutphase finden Sie unter https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html .

Die richtige Lösung hängt vom Kontext ab - zum Beispiel von einer Produktionsumgebung oder einer Entwicklungsumgebung.

Lösung 1: Geben Sie Speicherplatz frei

Wenn Sie genügend Speicherplatz freigeben, sodass mehr als 5% der Festplatte frei sind, wird dieses Problem behoben. Elasticsearch verlässt den schreibgeschützten Modus nicht automatisch, sobald genügend Festplatte frei ist. Sie müssen jedoch Folgendes tun, um die Indizes freizuschalten:

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

Lösung 2: Ändern Sie die Wasserzeicheneinstellung für die Flutstufe

Ändern Sie die "cluster.routing.allocation.disk.watermark.flood_stage"Einstellung auf etwas anderes. Sie kann entweder auf einen niedrigeren Prozentsatz oder auf einen absoluten Wert eingestellt werden. Hier ist ein Beispiel, wie Sie die Einstellung in den Dokumenten ändern können :

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"
  }
}

Nachdem Sie dies getan haben, müssen Sie den obigen Befehl curl verwenden, um die Indizes zu entsperren. Danach sollten sie jedoch nicht mehr in den schreibgeschützten Modus wechseln.

Sean Hammond
quelle
8
Hallo. Ich erhalte diesen Fehler, auch wenn in meinem System genügend freier Speicherplatz vorhanden ist. Gibt es andere Gründe, die dieses Problem melden könnten?
Sankalpa Timilsina
Ich habe das gleiche Problem, obwohl ich 82,43% Festplatte zur Verfügung habe. Ich behebe es mit dem Befehl curl, aber nach ein paar Tagen bekomme ich das gleiche.
Manu
@ SankalpaTimilsina hast du die Antwort bekommen, ich stehe vor dem gleichen Problem.
Malik Faiq
51

Standardmäßig wechselt die installierte Elasticsearch in den schreibgeschützten Modus, wenn Sie weniger als 5% des freien Speicherplatzes haben. Wenn Sie ähnliche Fehler sehen:

Elasticsearch :: Transport :: Transport :: Errors :: Forbidden: [403] {"error": {"root_cause": [{"type": "cluster_block_exception", "reason": "blockiert von: [FORBIDDEN / 12 / Index schreibgeschützt / Löschen zulassen (API)]; "}]," Typ ":" Cluster_Block_Ausnahme "," Grund ":" Blockiert durch: [FORBIDDEN / 12 / Index schreibgeschützt / Löschen zulassen (API)]; " }, "status": 403}

Oder in /usr/local/var/log/elasticsearch.log sehen Sie Protokolle ähnlich den folgenden:

Das Wasserzeichen der Flutstufe [95%] wurde auf [nCxquc7PTxKvs6hLkfonvg] [nCxquc7] [/ usr / local / var / lib / elasticsearch / node / 0] überschritten: 15,3 GB [4,1%]. Alle Indizes auf diesem Knoten werden als gelesen markiert -nur

Anschließend können Sie das Problem beheben, indem Sie die folgenden Befehle ausführen:

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}'
Payam Khaninejad
quelle
Dies funktioniert gut
Java Main
22
curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

VON

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

Zaibatsu
quelle
Ich bekomme eine {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [null] and no indices exist"mit Ihrem Befehl, eine Idee?
Cyril Duchon-Doris
1
Vielen Dank! Meiner Festplatte ging der Speicherplatz aus. Selbst nachdem ich etwas Platz frei gemacht hatte, blieb das Problem bestehen. Dieser Befehl hat mein Problem gelöst!
Fred
Dies ist die richtige Lösung für moderne Elasticsearch-Versionen. Es hat jedoch nicht funktioniert _all. Ich musste es manuell auf jeden Index anwenden.
Rubik
@rubik können Sie bitte erwähnen, wie Sie "es manuell auf jeden Index anwenden"? Ich bin neu in Elasticsearch und habe das gleiche Problem, bei dem _all nicht funktioniert.
rom
@rom Sicher. Ersetzen Sie einfach durch _allden Indexnamen und wiederholen Sie die Anforderung für jeden Index.
Rubik