Важная настройка Elasticsearch
Для начала работы с Elasticsearch требуется очень мало конфигурации, но перед использованием кластера в производственной среде необходимо учесть ряд пунктов:
Наш сервис Elastic Cloud автоматически настраивает эти параметры, делая ваш кластер готовым к работе по умолчанию.
Настройки путей
Elasticsearch записывает индексированные данные в индексы и потоки данных в директорию data. Приложения Elasticsearch записывают свои журналы, которые содержат информацию о состоянии кластера и операциях, в директорию logs.
Для macOS .tar.gz, Linux .tar.gz и Windows .zip установок, data и logs являются поддиректориями $ES_HOME по умолчанию. Однако файлы в $ES_HOME могут быть удалены во время обновления.
В рабочей среде настоятельно рекомендуется настроить path.data и path.logs в elasticsearch.yml на расположения вне $ES_HOME. Установки Elasticsearch с помощью Docker, Debian и RPM записывают данные и журналы в расположения вне $ES_HOME по умолчанию.
Поддерживаемые path.data и path.logs значения различаются в зависимости от платформы:
Установки Linux и macOS поддерживают пути в стиле Unix:
path: data: /var/data/elasticsearch logs: /var/log/elasticsearch
Установки Windows поддерживают пути DOS с экранированными обратными слешами:
path: data: "C:\\Elastic\\Elasticsearch\\data" logs: "C:\\Elastic\\Elasticsearch\\logs"
Не изменяйте ничего внутри каталога данных и не запускайте процессы, которые могут повлиять на его содержимое. Если что-то помимо Elasticsearch изменяет содержимое каталога данных, Elasticsearch может завершиться с сообщением об ошибке, о несоответствии данных или может работать правильно, но при этом незаметно потерять часть данных. Не пытайтесь создавать резервные копии каталога данных; нет поддерживаемого способа восстановить такую резервную копию. Вместо этого используйте Снапшот и восстановление для безопасного создания резервных копий. Не запускайте сканеры вирусов в каталоге данных. Сканер вирусов может помешать корректной работе Elasticsearch и изменить содержимое каталога данных. В каталоге данных нет исполняемых файлов, поэтому сканер вирусов найдёт только ложные срабатывания.
Elasticsearch предлагает устаревший параметр, который позволяет указать несколько путей в path.data. Чтобы узнать об этом параметре и о том, как от него отказаться, см. Несколько путей к данным.
Настройка имени кластера
Узел может присоединиться к кластеру только тогда, когда он разделяет cluster.name со всеми другими узлами в кластере. Имя по умолчанию — elasticsearch, но вы должны изменить его на соответствующее имя, которое описывает назначение кластера.
cluster.name: logging-prod
Не используйте одни и те же имена кластеров в разных средах. В противном случае узлы могут присоединиться к неправильному кластеру.
Изменение имени кластера требует полной перезагрузки кластера.
Настройка имени узла
Elasticsearch использует node.name в качестве удобочитаемого идентификатора конкретного экземпляра Elasticsearch. Это имя включено в ответ многих API. Имя узла по умолчанию — имя хоста машины при запуске Elasticsearch, но может быть явно настроено в elasticsearch.yml:
node.name: prod-data-2
Настройка сетевого узла
По умолчанию Elasticsearch связывается только с адресами петли обратной связи, такими как 127.0.0.1 и [::1]. Этого достаточно для запуска кластера из одного или нескольких узлов на одном сервере для разработки и тестирования, но для устойчивого производственного кластера необходимо использовать узлы на других серверах. Есть много сетевых настроек, но обычно вам нужно настроить только network.host:
network.host: 192.168.1.10
Когда вы предоставляете значение для network.host, Elasticsearch предполагает, что вы перешли от режима разработки к производственному режиму, и обновляет ряд проверок запуска системы с предупреждений на исключения. См. различия между режимами разработки и производства.
Настройки обнаружения и формирования кластера
Настройте два важных параметра обнаружения и формирования кластера перед переходом в производство, чтобы узлы в кластере могли обнаруживать друг друга и избирать главный узел.
discovery.seed_hosts
Из коробки, без какой-либо сетевой конфигурации, Elasticsearch будет связываться с доступными адресами обратной связи и сканировать локальные порты 9300 до 9305 для подключения к другим узлам, работающим на том же сервере. Это поведение обеспечивает автоматическое формирование кластера без необходимости какой-либо конфигурации.
Когда вы хотите создать кластер с узлами на других хостах, используйте параметр статического discovery.seed_hosts. Этот параметр предоставляет список других узлов кластера, которые могут быть главными и, вероятно, будут активны и доступны для первоначального процесса обнаружения. Этот параметр принимает последовательность или массив YAML адресов всех узлов, которые могут быть главными в кластере. Каждый адрес может быть либо IP-адресом, либо именем хоста, которое разрешается до одного или нескольких IP-адресов через DNS.
discovery.seed_hosts: - 192.168.1.10:9300 - 192.168.1.11 - seeds.mydomain.com - [0:0:0:0:0:ffff:c0a8:10c]:9301
| Порт является необязательным и по умолчанию равен | |
| Если имя хоста разрешается до нескольких IP-адресов, узел будет пытаться обнаружить другие узлы по всем разрешенным адресам. | |
| IPv6-адреса должны быть заключены в квадратные скобки. |
Если у ваших узлов, которые могут быть главными, нет постоянных имён или адресов, используйте альтернативный провайдер хостов для динамического поиска их адресов.
cluster.initial_master_nodes
Когда вы впервые запускаете кластер Elasticsearch, этап инициализации кластера определяет набор узлов, которые могут быть главными, чьи голоса учитываются на первом этапе выборов. В режиме разработки, без настроенных параметров обнаружения, этот этап выполняется автоматически самими узлами.
Поскольку автоматическая инициализация небезопасна, при запуске нового кластера в производственном режиме вы должны явно указать узлы, которые могут быть главными, чьи голоса должны быть учтены на первых выборах. Вы задаёте этот список с помощью параметра cluster.initial_master_nodes на каждом узле, который может быть главным. Не настраивайте этот параметр на узлах, которые не могут быть главными.
После успешного первого формирования кластера, удалите настройку cluster.initial_master_nodes из конфигурации каждого узла и никогда больше не устанавливайте её для данного кластера. Не настраивайте эту настройку на узлах, присоединяющихся к существующему кластеру. Не настраивайте эту настройку на узлах, которые перезапускаются. Не настраивайте эту настройку при полном перезапуске кластера. Смотрите настройку кластера.
discovery.seed_hosts: - 192.168.1.10:9300 - 192.168.1.11 - seeds.mydomain.com - [0:0:0:0:0:ffff:c0a8:10c]:9301 cluster.initial_master_nodes: - master-node-a - master-node-b - master-node-c
| Определите начальные узлы-мастера по их |
Смотрите создание кластера и настройки обнаружения и формирования кластера.
Настройки размера кучи
По умолчанию Elasticsearch автоматически устанавливает размер кучи JVM на основе ролей узла и общего объёма памяти. Для большинства производственных сред рекомендуется размер по умолчанию.
Если необходимо, вы можете переопределить размер по умолчанию, вручную установив размер кучи JVM.
Настройка пути к дампу кучи JVM
По умолчанию Elasticsearch настраивает JVM на сохранение дампов кучи при исключениях Out Of Memory в стандартный каталог данных. В пакетах RPM и Debian этот каталог равен /var/lib/elasticsearch. В дистрибутивах Linux и MacOS, а также Windows этот каталог расположен в корневой директории Elasticsearch.
Если этот путь не подходит для сохранения дампов кучи, измените запись -XX:HeapDumpPath=... в jvm.options:
- Если вы укажете каталог, JVM сгенерирует имя файла дампа кучи, основываясь на PID запущенного экземпляра.
- Если вы укажете фиксированное имя файла вместо каталога, то файл не должен существовать, когда JVM необходимо создать дамп кучи при исключении Out Of Memory. В противном случае дампа кучи не произойдёт.
Настройки ведения журнала GC
По умолчанию Elasticsearch включает логирование процесса сбора мусора (GC). Они настраиваются в jvm.options и выводятся в тот же каталог, что и логи Elasticsearch. По умолчанию логи вращаются каждые 64 МБ и могут занимать до 2 ГБ дискового пространства.
Вы можете перенастроить логирование JVM, используя параметры командной строки, описанные в JEP 158: Объединённое логирование JVM. Если вы не измените файл jvm.options напрямую, конфигурация Elasticsearch будет применена дополнительно к вашим настройкам. Чтобы отключить стандартную конфигурацию, сначала отключите логирование, указав опцию -Xlog:disable, а затем укажите собственные параметры командной строки. Это отключит все логирование JVM, поэтому обязательно ознакомьтесь с доступными параметрами и включите всё необходимое.
Чтобы ознакомиться с дополнительными параметрами, не содержащимися в оригинальном JEP, смотрите Включить логирование с помощью унифицированной системы логирования JVM.
Примеры
Измените расположение вывода логов GC по умолчанию на /opt/my-app/gc.log, создав $ES_HOME/config/jvm.options.d/gc.options с некоторыми образцами опций:
# Turn off all previous logging configuratons -Xlog:disable # Default settings from JEP 158, but with `utctime` instead of `uptime` to match the next line -Xlog:all=warning:stderr:utctime,level,tags # Enable GC logging to a custom location with a variety of options -Xlog:gc*,gc+age=trace,safepoint:file=/opt/my-app/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m
Настройте контейнер Elasticsearch Docker на отправку логов отладки GC в стандартный вывод ошибки (stderr). Это позволяет контейнеру-оркестратору обрабатывать вывод. Если используется переменная окружения ES_JAVA_OPTS, укажите:
MY_OPTS="-Xlog:disable -Xlog:all=warning:stderr:utctime,level,tags -Xlog:gc=debug:stderr:utctime" docker run -e ES_JAVA_OPTS="$MY_OPTS" # etc
Настройки временного каталога
По умолчанию Elasticsearch использует отдельный временный каталог, который скрипт запуска создаёт сразу под системным временным каталогом.
В некоторых дистрибутивах Linux системная утилита удаляет файлы и каталоги из /tmp, если к ним не было доступа в последнее время. Это может привести к удалению временного каталога Elasticsearch во время работы, если функции, требующие этот каталог, не используются длительное время. Удаление временного каталога создаёт проблемы, если впоследствии используется функция, требующая этот каталог.
Если вы устанавливаете Elasticsearch с помощью пакетов .deb или .rpm и запускаете его под systemd, то временный каталог, используемый Elasticsearch, исключается из периодической очистки.
Если вы планируете запустить дистрибутив .tar.gz на Linux или MacOS на продолжительное время, подумайте о создании выделенного временного каталога для Elasticsearch, который не находится в пути, где будут удаляться старые файлы и каталоги. Этот каталог должен иметь разрешения, позволяющие только пользователю, под которым запускается Elasticsearch, к нему обращаться. Затем задайте переменную среды $ES_TMPDIR, указывающую на этот каталог, перед запуском Elasticsearch.
Настройка логов критических ошибок JVM
По умолчанию Elasticsearch настраивает JVM на запись логов критических ошибок в стандартный каталог логов. В пакетах RPM и Debian этот каталог — /var/log/elasticsearch. В дистрибутивах Linux и MacOS, а также Windows этот каталог расположен в корневой директории Elasticsearch.
Это логи, создаваемые JVM при возникновении критической ошибки, например, сегментации. Если этот путь не подходит для хранения логов, измените запись -XX:ErrorFile=... в jvm.options.
Резервные копии кластера
В случае катастрофы снимки могут предотвратить потерю данных. Управление жизненным циклом снимков — самый простой способ создания регулярных резервных копий вашего кластера. Для получения дополнительной информации, смотрите Создать снимок.
Создание снимка — единственный надёжный и поддерживаемый способ создания резервных копий кластера. Вы не можете создать резервную копию кластера Elasticsearch, создавая копии каталогов данных его узлов. Нет поддерживаемых методов восстановления данных из резервной копии на уровне файловой системы. Если вы попытаетесь восстановить кластер из такой резервной копии, это может завершиться ошибкой с сообщениями о повреждении или отсутствии файлов или других несоответствиях данных, или может показаться, что восстановление прошло успешно, но некоторые данные при этом будут потеряны.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/important-settings.html