Здравствуйте. Я добавил в своё rails приложение
gem 'elasticsearch-model'
gem 'elasticsearch-rails'.
Настроил согласно инструкции, поиск работает. Но, постоянно при старте поиска идёт жуткое подвисание всей системы и после стоп сервиса elastic 9200. Приходиться делать restart. Иногда система не оживает. Проект учебный, всего поиск идёт по 15 записям. Оперативная память в размере 1гб свободна. Попытался в момент начала зависания, когда ещё что-то можно сделать взять логи с _nodes/stats logs
А что в логах elasticsearch?
Извините, я новичок. А как их посмотреть?)
Запустите команду GET /_nodes/settings
. Вы получите назад что-то вроде:
{
"_nodes" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"cluster_name":"elasticsearch",
"nodes" : {
"4irbd1T5TZqb03W9rGp3WQ" : {
"name" : "...",
...
"settings" : {
...
"path" : {
"logs" : "/usr/share/elasticsearch/logs", <-- Логи должны быть тут
...
},
"discovery" : {
...
Интересует тот, который называется elasticsearch.log
вроде эти логи
Похоже, что кто-то elasticsearch из вне прибивает. Может OOMKiller безобразничает. Сколько всего памяти на сервере и что там еще запущено?
вот скрин из диспетчера https://i.imgur.com/YMbJQeF.png Запущен ide rubymine и mozilla. Система ubuntu на виртуальной машине.
Да. Скорее всего OOMKiller мешается. Попробуйте запустить с 512m. Задать память можно в файле jvm.options:
-Xms512m
-Xmx512m
вроде положительный результат есть, уже 20 минут ничего не виснет. Спасибо за помощь.
Теперь у меня новая проблема в тестовом окружении. Мои тесты не работают. При создании экземпляра модели gem Factory_bot_rails, ошибка ``` Failure/Error: let(:post) { FactoryBot.create :post, user: user }
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}
Я попытался добавить создание и рефреш индексов в тесты
let(:user) { FactoryBot.create :user }
let(:post) { FactoryBot.create :post, user: user }
Post.elasticsearch.create_index!
Post.elasticsearch.refresh_index! ``` но это не изменило ничего
У вас права доступа на кластере настроены?
не могу сказать, а как можно проверить? я сам ничего не настраивал.
Вы вручную, через curl или kibana без введения пароля можете какой-нибудь индекс создать?
сейчас попробовал создать, не вышло. Хотя до этого всё создавалось без проблем. Ошибка [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}
сейчас попробовал создать, не вышло. Хотя до этого всё создавалось без проблем.
Тогда скорее всего у вас это происходит потому, что у вас диски на сервере переполнились. Когда диски наполняются больше чем на 95%, elasticsearch устанавливает этот блок, чтобы предотвратить полное исчерпание дискового пространства. Надо либо диски добавить, либо данные почистить.
я добавил сегодня, а как мне сейчас перезапустить это всё? чтобы они опять стали доступны
вы путь поменяли к данным? если да - то надо elasticsearch перезапустить
нет пути не менял. Сделал сейчас sudo service elasticsearch stop и потом start. Попробовал создать индекс, не работает.
Если вы пути не меняли, то как вы размер доступного дискового пространства увеличили?
я с виртуальной машины запускаю ubuntu, на ней уже стоит elastic.)) Я в параметрах виртуальной машины добавил дискового пространства и проверил уже в ubunte. Размер увеличился.