При попытке отправить документы в 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
Ответ 1
Это происходит, когда Elasticsearch считает, что диск работает на низком уровне, поэтому он переходит в режим только для чтения.
По умолчанию решения Elasticsearch базируются на проценте дискового пространства, свободные, так и на больших дисках это может произойти, даже если у вас есть много гигабайта свободного пространства.
Водяной знак наводнения составляет 95% по умолчанию, поэтому на приводе 1 ТБ вам потребуется не менее 50 ГБ свободного места, или 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 выше, чтобы разблокировать индексы, но после этого они не должны переходить в режим только для чтения.
Ответ 2
По умолчанию установленный Elasticsearch переходит в режим только для чтения, когда у вас менее 5% свободного дискового пространства. Если вы видите ошибки, подобные этой:
Elasticsearch::Transport::Transport::Errors::Forbidden: [403]
{"error":{"root_cause":[{"type":"cluster_block_exception","reason":"blocked
by: [FORBIDDEN/12/index read-only/allow delete
(api)];"}],"type":"cluster_block_exception","reason":"blocked by:
[FORBIDDEN/12/index read-only/allow delete (api)];"},"status":403}
Или в /usr/local/var/log/elasticsearch.log вы можете увидеть журналы, похожие на:
Водяной знак на этапе затопления диска [95%] превышен на [NCxquc7PTxKvs6hLkfonvg] [nCxquc7] [/USR/локальные /VAR/Library/elasticsearch/узлы/0] бесплатно: 15,3 ГБ [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}'
Ответ 3
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/