Вопрос или проблема
Когда я пытался запустить агрегацию логов, я обнаружил следующую ошибку, сгенерированную elasticsearch:
[2018-02-04T13:44:04,259][INFO ][o.e.b.BootstrapChecks ] [elasticsearch-logging-0] привязка или публикация на незацикленном или не локальном адресе, выполняются проверки загрузки
ОШИБКА: [1] проверки загрузки не прошли
[1]: максимальное количество дескрипторов файлов [1024] для процесса elasticsearch слишком низкое, увеличьте как минимум до [65536]
[2018-02-04T13:44:04,268][INFO ][o.e.n.Node ] [elasticsearch-logging-0] остановка ...
[2018-02-04T13:44:04,486][INFO ][o.e.n.Node ] [elasticsearch-logging-0] остановлено
[2018-02-04T13:44:04,486][INFO ][o.e.n.Node ] [elasticsearch-logging-0] закрытие ...
[2018-02-04T13:44:04,561][INFO ][o.e.n.Node ] [elasticsearch-logging-0] закрыто
[2018-02-04T13:44:04,564][INFO ][o.e.x.m.j.p.NativeController] Процесс Native controller остановлен - новые процессы не могут быть запущены
Кстати, я запускаю кластер kubernetes версии 1.8.0 на миньонах и 1.9.0 на мастерах, используя cri-containerd на машинах с Ubuntu 16.04.
Любая помощь будет оценена.
Это описано в документации;
https://www.elastic.co/guide/en/elasticsearch/reference/current/file-descriptors.html Вам нужно изменить ulimit на дескрипторы файлов, доступные процессу.
Чтобы установить лимит на дескрипторы файлов постоянно, вы можете добавить это в файл ограничений;
# /etc/security/limits.conf
elasticsearch - nofile 65536
и перезапустить службу. на Ubuntu может быть необходимо включить pam limits.conf
Если вы используете systemd, то эти значения устанавливаются в файлах elasticsearch.service
, но это обычно делается установленным пакетом. Вы можете переопределить эти настройки…
/etc/systemd/system/elasticsearch.service.d/override.conf
[Service]
LimitMEMLOCK=infinity
Ответ или решение
Увеличение максимального числа дескрипторов файлов для Elasticsearch
Когда вы запускаете сервис для агрегации логов, на основе Elasticsearch, возможно столкнуться с ошибкой, связанной с ограничением на максимальное количество открытых дескрипторов файлов. В приведённом вами сообщении об ошибке указано:
max file descriptors [1024] for elasticsearch process is too low, increase to at least [65536]
Эта ошибка свидетельствует о том, что текущий лимит дескрипторов файлов недостаточен для нормальной работы Elasticsearch, особенно в условиях нагрузки.
Причины проблемы
Elasticsearch требует значительного количества открытых файловых дескрипторов из-за своей архитектуры, которая предполагает работу с большим количеством индексов и шардов. Если лимит не повышен, это может привести к сбоям или снижению производительности сервиса.
Решение проблемы
Для решения этой проблемы необходимо увеличить значение параметра nofile
, который отвечает за максимальное количество открываемых файловым процессом дескрипторов. Ниже перечислены шаги, которые необходимо выполнить для установки нового лимита.
1. Изменение конфигурации limits.conf
Для установки лимита на количество дескрипторов файлов, сделайте следующее:
-
Откройте файл
/etc/security/limits.conf
с правами суперпользователя:sudo nano /etc/security/limits.conf
-
Добавьте в конец файла строку для пользователя, под которым работает Elasticsearch. Например:
elasticsearch - nofile 65536
-
Сохраните изменения и закройте файл.
2. Проверка PAM конфигурации
В некоторых дистрибутивах Linux, например в Ubuntu, может потребоваться активировать PAM (Pluggable Authentication Modules) для считывания лимитов из limits.conf
. Убедитесь, что строка session required pam_limits.so
включена в файл /etc/pam.d/common-session
.
3. Изменение конфигурации для systemd (если используется)
Если Elasticsearch запускается в окружении systemd (что типично для современных дистрибутивов), необходимо установить лимиты в конфигурационном файле сервиса.
-
Создайте директорию для переопределения конфигурации:
sudo mkdir -p /etc/systemd/system/elasticsearch.service.d/
-
Создайте файл
override.conf
:sudo nano /etc/systemd/system/elasticsearch.service.d/override.conf
-
Добавьте в него следующие строки:
[Service] LimitNOFILE=65536
-
Сохраните файл и закройте его.
4. Перезапуск сервиса
После внесения всех изменений, вам необходимо перезапустить сервис Elasticsearch, чтобы применить новые настройки:
sudo systemctl daemon-reload
sudo systemctl restart elasticsearch
5. Проверка изменений
После перезапуска проверьте, применились ли новые лимиты. Вы можете сделать это с помощью команды:
sudo -u elasticsearch sh -c 'ulimit -n'
Эта команда должна вернуть 65536
или другое значение, установленное вами.
Заключение
Увеличение лимита дескрипторов файлов для Elasticsearch является важным шагом для обеспечения стабильной работы вашего кластера при высоких нагрузках. Всегда следуйте документации Elastic и используйте данные рекомендации как основу для конфигурации своего окружения.
Благодарим вас за внимание к аренде ресурсов вашего сервиса. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.