Elasticsearch hatası: cluster_block_exception [FORBIDDEN / 12 / dizin salt okunur / silmeye izin ver (api)], taşma aşaması disk filigranı aşıldı


113

Belgeleri Elasticsearch'e normal şekilde göndermeye çalışırken şu hatayı alıyorum:

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

Bu mesajı Elasticsearch günlüklerinde de görüyorum:

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

Bu soruyu sorduğunuzda bu problemle karşılaştım. ES hafızayı boşaltmayı tartışıyor
Abhijith S

Yanıtlar:


223

Bu, Elasticsearch'ün diskin boş alanın azaldığını düşünmesi ve kendini salt okunur moduna geçirmesi durumunda meydana gelir.

Varsayılan olarak Elasticsearch'ün kararı, boş disk alanı yüzdesine dayanır , bu nedenle büyük disklerde bu, çok sayıda gigabayt boş alanınız olsa bile gerçekleşebilir.

Sel aşaması filigranı varsayılan olarak% 95'tir, bu nedenle 1 TB'lık bir sürücüde en az 50 GB boş alana ihtiyacınız vardır, aksi takdirde Elasticsearch kendisini salt okunur moduna geçirir.

Sel aşaması filigranı hakkında belgeler için bkz. Https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html .

Doğru çözüm bağlama bağlıdır - örneğin bir üretim ortamı ile bir geliştirme ortamı.

1.Çözüm: Disk alanını boşaltın

Diskin% 5'inden fazlasının boş olması için yeterli disk alanı boşaltmak bu sorunu çözecektir. Elasticsearch, yeterli disk boş olduğunda otomatik olarak salt okunur moddan çıkmaz, ancak endekslerin kilidini açmak için böyle bir şey yapmanız gerekir:

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

Çözüm 2: Sel aşaması filigran ayarını değiştirin

Change "cluster.routing.allocation.disk.watermark.flood_stage"başka bir şeye ayarı. Daha düşük bir yüzdeye veya mutlak bir değere ayarlanabilir. Dokümanlardan ayarın nasıl değiştirileceğine dair bir örnek :

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

Yine, bunu yaptıktan sonra, indislerin kilidini açmak için yukarıdaki curl komutunu kullanmanız gerekecek, ancak bundan sonra tekrar salt okunur moda geçmemelisiniz.


8
Selam. Ancak sistemimde yeterince boş alan olsa bile bu hatayı alıyorum. Bu sorunu bildirebilecek başka nedenler var mı?
Sankalpa Timilsina

% 82.43 diskim olmasına rağmen aynı sorunu yaşıyorum. Curl komutuyla düzeltirim ama birkaç gün sonra aynısını alıyorum.
manu

@SankalpaTimilsina cevabı aldın mı, ben de aynı sorunla karşı karşıyayım.
Malik Faiq

56

Varsayılan olarak, kurulu Elasticsearch,% 5'ten az boş disk alanınız olduğunda salt okunur moda geçer. Buna benzer hatalar görürseniz:

Elasticsearch :: Transport :: Transport :: Errors :: Yasak: [403] {"hata": {"root_cause": [{"tür": "cluster_block_exception", "neden": "engelleyen: [FORBIDDEN / 12 / index salt okunur / allow delete (api)]; "}]," type ":" cluster_block_exception "," reason ":" tarafından engellendi: [FORBIDDEN / 12 / index salt okunur / allow delete (api)]; " }, "durum": 403}

Veya /usr/local/var/log/elasticsearch.log'da aşağıdakilere benzer günlükler görebilirsiniz:

flood stage disk filigranı [% 95] [nCxquc7PTxKvs6hLkfonvg] [nCxquc7] [/ usr / local / var / lib / elasticsearch / nodes / 0] üzerinde aşıldı: 15.3gb [4.1%], bu düğümdeki tüm endeksler okundu olarak işaretlenecek -sadece

Ardından aşağıdaki komutları çalıştırarak sorunu çözebilirsiniz:

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

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

FROM

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


Emrinize alıyorum {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [null] and no indices exist", bir fikriniz var mı?
Cyril Duchon-Doris

1
Teşekkürler! Diskimde yer kalmadı. Biraz yer açtıktan sonra bile sorun devam etti. Bu komut sorunumu çözdü!
Fred

Modern Elasticsearch sürümleri için doğru çözüm budur. Ancak, işe yaramadı _all. Her dizine manuel olarak uygulamak zorunda kaldım.
rubik

@rubik, "her dizine manuel olarak nasıl uyguladığınızdan" bahseder misiniz? Elasticsearch'te yeniyim ve _all'ın çalışmadığı aynı sorunla karşı karşıyayım.
rom

@rom Elbette. Sadece _alldizin adıyla değiştirin ve her dizin için isteği tekrarlayın.
rubik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.