Errore Elasticsearch: cluster_block_exception [FORBIDDEN / 12 / index sola lettura / consenti eliminazione (api)], watermark del disco della fase Flood superata


107

Quando provo a pubblicare documenti su Elasticsearch normalmente ricevo questo errore:

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

Vedo questo messaggio anche nei log di Elasticsearch:

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

Mi sono appena imbattuto in questo problema quando hai posto questa domanda. ES discute dicendo che libera la memoria
Abhijith S

Risposte:


215

Ciò accade quando Elasticsearch pensa che il disco stia esaurendo lo spazio, quindi si mette in modalità di sola lettura.

Per impostazione predefinita, la decisione di Elasticsearch si basa sulla percentuale di spazio su disco disponibile, quindi su dischi di grandi dimensioni ciò può accadere anche se si hanno molti gigabyte di spazio libero.

La filigrana della fase di inondazione è del 95% per impostazione predefinita, quindi su un'unità da 1 TB sono necessari almeno 50 GB di spazio libero o Elasticsearch si metterà in modalità di sola lettura.

Per i documenti sulla filigrana della fase di inondazione, vedere https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html .

La giusta soluzione dipende dal contesto, ad esempio un ambiente di produzione rispetto a un ambiente di sviluppo.

Soluzione 1: liberare spazio su disco

Liberare spazio su disco sufficiente in modo che più del 5% del disco sia libero risolverà questo problema. Elasticsearch non uscirà automaticamente dalla modalità di sola lettura una volta che il disco è libero a sufficienza, dovrai fare qualcosa del genere per sbloccare gli indici:

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

Soluzione 2: modifica l'impostazione della filigrana della fase di inondazione

Cambia l' "cluster.routing.allocation.disk.watermark.flood_stage"impostazione in qualcos'altro. Può essere impostato su una percentuale inferiore o su un valore assoluto. Ecco un esempio di come modificare l'impostazione dai documenti :

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

Di nuovo, dopo averlo fatto dovrai usare il comando curl sopra per sbloccare gli indici, ma dopo non dovrebbero tornare in modalità di sola lettura.


8
Ciao. Ma ricevo questo errore, anche quando c'è abbastanza spazio libero nel mio sistema. Ci sono altri motivi che potrebbero segnalare questo problema?
Sankalpa Timilsina

Ho lo stesso problema, anche se ho l'82,43% di disco disponibile. Lo risolvo con il comando curl ma dopo pochi giorni ottengo lo stesso.
manu

@SankalpaTimilsina hai avuto la risposta, sto affrontando lo stesso problema.
Malik Faiq,

53

Per impostazione predefinita, Elasticsearch installato entra in modalità di sola lettura quando si dispone di meno del 5% di spazio libero su disco. Se vedi errori simili a questo:

Elasticsearch :: Transport :: Transport :: Errors :: Forbidden: [403] {"error": {"root_cause": [{"type": "cluster_block_exception", "reason": "bloccato da: [FORBIDDEN / 12 / index sola lettura / consenti eliminazione (api)]; "}]," tipo ":" cluster_block_exception "," motivo ":" bloccato da: [FORBIDDEN / 12 / index sola lettura / consenti eliminazione (api)]; " }, "status": 403}

Oppure in /usr/local/var/log/elasticsearch.log puoi vedere log simili a:

filigrana disco fase flood [95%] superata su [nCxquc7PTxKvs6hLkfonvg] [nCxquc7] [/ usr / local / var / lib / elasticsearch / nodes / 0] libero: 15,3 gb [4,1%], tutti gli indici su questo nodo saranno contrassegnati come letti -solo

Quindi puoi risolverlo eseguendo i seguenti comandi:

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

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

A PARTIRE DAL

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


Ricevo un messaggio {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [null] and no indices exist"con il tuo comando, qualche idea?
Cyril Duchon-Doris il

1
Grazie! Il mio disco stava esaurendo lo spazio. Anche dopo aver liberato un po 'di spazio, il problema è rimasto. Questo comando ha risolto il mio problema!
Fred,

Questa è la soluzione corretta per le moderne versioni di Elasticsearch. Tuttavia, non ha funzionato con _all. Ho dovuto applicarlo manualmente a ogni indice.
rubik

@rubik puoi per favore menzionare come lo "applichi manualmente a ogni indice"? Sono nuovo su Elasticsearch e devo affrontare lo stesso problema in cui _all non funziona.
rom

@rom Sure. Basta sostituire _allcon il nome dell'indice e ripetere la richiesta per ogni indice.
rubik
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.