Фиксим ошибку ElasticSearch - low disk watermark [X%] - TheGlitchy.com

Фиксим ошибку ElasticSearch - low disk watermark [X%]

Запуская Seed RoR приложения на локальной машине получил неожиданную ошибку следующего вида:
[INFO ][o.e.c.r.a.DiskThresholdMonitor] [txaHD4y] low disk watermark [85%] exceeded on [txaHD4yFTmWbsFt6vUOvmQ][txaHD4y][/usr/local/var/lib/elasticsearch/nodes/0] free: 29.7gb[12.7%], replicas will not be assigned to this node
:ok
[INFO ][o.e.c.m.MetaDataDeleteIndexService] [txaHD4y] [projects_development_20200317113730591/RWwSRA08Qfutpnszd1rQIQ] deleting index
[INFO ][o.e.c.m.MetaDataCreateIndexService] [txaHD4y] [projects_development_20200317114211756] creating index, cause [api], templates [], shards [5]/[1], mappings [project]
[INFO ][o.e.c.m.MetaDataMappingService] [txaHD4y] [projects_development_20200317114211756/f8r1oBVFSB2FD8Bwn7CSaQ] update_mapping [project]
[INFO ][o.e.c.m.MetaDataMappingService] [txaHD4y] [projects_development_20200317114211756/f8r1oBVFSB2FD8Bwn7CSaQ] update_mapping [project]
rake aborted!
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}
/../../../../../gems/elasticsearch-transport-7.4.0/lib/elasticsearch/transport/transport/base.rb:205:in `__raise_transport_error'
/../../../../../gems/elasticsearch-transport-7.4.0/lib/elasticsearch/transport/transport/base.rb:333:in `perform_request'
/../../../../../gems/elasticsearch-transport-7.4.0/lib/elasticsearch/transport/transport/http/faraday.rb:24:in `perform_request'
/../../../../../gems/elasticsearch-transport-7.4.0/lib/elasticsearch/transport/client.rb:152:in `perform_request'
/../../../../../gems/elasticsearch-api-7.4.0/lib/elasticsearch/api/namespace/common.rb:25:in `perform_request'
/../../../../../gems/elasticsearch-api-7.4.0/lib/elasticsearch/api/actions/indices/update_aliases.rb:46:in `update_aliases'
/../../../../../gems/searchkick-4.2.1/lib/searchkick/index.rb:89:in `promote'
/../../../../../gems/searchkick-4.2.1/lib/searchkick/index.rb:307:in `reindex_scope'
/../../../../../gems/searchkick-4.2.1/lib/searchkick/index.rb:200:in `reindex'
/../../../../../gems/searchkick-4.2.1/lib/searchkick/model.rb:60:in `searchkick_reindex'
/../../../../test_project/db/seeds.rb:66:in `<top (required)>'
/../../../../../gems/activesupport-5.1.3/lib/active_support/dependencies.rb:286:in `load'
/../../../../../gems/activesupport-5.1.3/lib/active_support/dependencies.rb:286:in `block in load'
/../../../../../gems/activesupport-5.1.3/lib/active_support/dependencies.rb:258:in `load_dependency'
/../../../../../gems/activesupport-5.1.3/lib/active_support/dependencies.rb:286:in `load'
/../../../../../gems/railties-5.1.3/lib/rails/engine.rb:549:in `load_seed'
/../../../../../gems/activerecord-5.1.3/lib/active_record/tasks/database_tasks.rb:270:in `load_seed'
/../../../../../gems/activerecord-5.1.3/lib/active_record/railties/databases.rake:184:in `block (2 levels) in <top (required)>'
/../../../../../gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/../../../../../bin/ruby_executable_hooks:24:in `eval'
/../../../../../bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => db:seed

Ничего не предвещало беды, но оказалось, что все не совсем плохо. Проблема в отсутствии достаточного количества места на SSD / жестком диске (на кануне было скачано довольно много контента и место почти закончилось).

У меня на macOS Catalina установлен ElasticSearch при помощи Homebrew. ElasticSearch при недостатке пространства на диске переходит в режим чтения. Во время выполнения seed - создавались записи в БД и соответственно триггерилась реиндексация (в моем случае) ElasticSearch.

low disk watermark [85%] exceeded on [..][..[/usr/local/var/lib/elasticsearch/nodes/0] free: 29.7gb[12.7%], replicas will not be assigned to this node

Есть несколько путей решения проблемы: 
  • Освободить пространство диске (удалить ненужные файлы);
  • Отключить порог перехода в режим "Read only";

Я удалил некоторые файлы, но не освободил нужного количества места, поэтому перешел к отключению порога (threshold):

Запускаем ElasticSearch
elasticsearch
В соседней вкладке выполняем следующие две команды:

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

После этого проблема была решена. DiskThresholdMonitor продолжал выдавать сообщение "low disk watermark [85%] exceeded...", но seed отработал как надо (read & write).
Наверх