Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Настройка Elasticsearch ›Настройка Elasticsearch

Важная настройка Elasticsearch

Для начала работы с Elasticsearch требуется очень небольшая настройка, но перед использованием кластера в рабочей среде необходимо учесть ряд моментов:

  • Настройка путей
  • Настройка имени кластера
  • Настройка имени узла
  • Настройки сетевого хоста
  • Настройки обнаружения
  • Настройки размера кучи
  • Настройка пути к дампу кучи JVM
  • Настройки логирования GC
  • Настройки временной директории
  • Настройка журнала критических ошибок JVM
  • Резервное копирование кластера

Наш сервис 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 и macOS Homebrew по умолчанию записывают данные и журналы в места, находящиеся за пределами $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 и может изменить содержимое каталога данных. Каталог данных не содержит исполняемых файлов, поэтому антивирусная программа обнаружит только ложные срабатывания.

Несколько путей к данным

Устарело в версии 7.13.0.

При необходимости вы можете указать несколько путей в path.data. Elasticsearch хранит данные узла по всем предоставленным путям, но данные каждого фрагмента сохраняются в одном пути.

Elasticsearch не балансирует фрагменты по путям данных узла. Высокая загрузка диска на одном пути может привести к срабатыванию порогового значения загрузки диска для всего узла. В случае срабатывания Elasticsearch не будет добавлять фрагменты на узел, даже если другие пути узла имеют доступный объем дискового пространства. Если вам нужен дополнительный дисковый объем, рекомендуем добавить новый узел, а не дополнительные пути к данным.

Установки Linux и macOS поддерживают несколько путей в стиле Unix в path.data:

path:
  data:
    - /mnt/elasticsearch_1
    - /mnt/elasticsearch_2
    - /mnt/elasticsearch_3

Установки Windows поддерживают несколько путей DOS в path.data:

path:
  data:
    - "C:\\Elastic\\Elasticsearch_1"
    - "E:\\Elastic\\Elasticsearch_1"
    - "F:\\Elastic\\Elasticsearch_3"

Миграция с нескольких путей данных

Поддержка нескольких путей к данным устарела в версии 7.13 и будет удалена в будущих выпусках.

В качестве альтернативы нескольким путям к данным, можно создать файловую систему, охватывающую несколько дисков с помощью аппаратного виртуализационного слоя, такого как RAID, или программного виртуализационного слоя, например, Logical Volume Manager (LVM) на Linux или Storage Spaces на Windows. Если вы хотите использовать несколько путей к данным на одном компьютере, необходимо запустить по одному узлу на каждый путь к данным.

Если вы в настоящее время используете несколько путей к данным в кластере высокой доступности, то вы можете перейти на конфигурацию с одним путем для каждого узла без простоев, используя процесс, аналогичный поэтапному перезапуску: поочерёдно выключайте каждый узел и заменяйте его одним или несколькими узлами, каждый из которых настроен на использование одного пути к данным. Более подробно, для каждого узла, который в настоящее время имеет несколько путей к данным, выполните следующие действия.

  1. Сделайте снимок для защиты данных в случае катастрофы.
  2. Необязательно, мигрируйте данные с целевого узла, используя фильтр распределения:

    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.exclude._name": "target-node-name"
      }
    }

    Вы можете использовать API cat allocation, чтобы отслеживать прогресс этой миграции данных. Если некоторые фрагменты не мигрируют, то API cluster allocation explain поможет определить причину.

  3. Следуйте шагам процесса поэтапного перезапуска вплоть до и включая остановку целевого узла.
  4. Убедитесь, что состояние кластера является yellow или green, так что копия каждого фрагмента назначена по крайней мере одному из других узлов в вашем кластере.
  5. При необходимости удалите применённый ранее фильтр распределения.

    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.exclude._name": null
      }
    }
  6. Удалите данные, хранящиеся на остановленном узле, удалив содержимое его путей к данным.
  7. Переконфигурируйте хранилище. Например, объедините диски в единую файловую систему с помощью LVM или Storage Spaces. Убедитесь, что ваше переконфигурированное хранилище имеет достаточное место для хранения данных.
  8. Переконфигурируйте узел, изменив параметр path.data в файле elasticsearch.yml. При необходимости установите больше узлов, каждый из которых имеет свой параметр path.data, указывающий на отдельный путь к данным.
  9. Запустите новые узлы и следуйте остальной части процесса поэтапного перезапуска для них.
  10. Убедитесь, что состояние вашего кластера является green, чтобы каждый фрагмент был назначен.

В качестве альтернативы вы можете добавить некоторое количество узлов с одним путем к данным в свой кластер, мигрировать все ваши данные на эти новые узлы с помощью фильтров распределения, а затем удалить старые узлы из кластера. Этот подход временно удвоит размер вашего кластера, поэтому он будет работать только в том случае, если у вас есть возможность расширения кластера таким образом.

Если вы в настоящее время используете несколько путей к данным, но ваш кластер не является высокодоступным, то вы можете перейти на не устаревшую конфигурацию, сделав снимок, создав новый кластер с желаемой конфигурацией и восстановив снимок в нём.

Настройка имени кластера

Узел может присоединиться к кластеру только в том случае, если он разделяет своё 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 

Порт является необязательным и по умолчанию равен 9300, но может быть изменён.

Если имя хоста разрешается в несколько 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

Определите начальные мастер-узлы по их node.name, которые по умолчанию соответствуют их имени хоста. Убедитесь, что значение в cluster.initial_master_nodes точно соответствует node.name. Если вы используете полное доменное имя (FQDN), например, master-node-a.example.com для имён узлов, то вы должны использовать FQDN в этом списке. И наоборот, если node.name — это простое имя хоста без каких-либо дополнительных квалификаторов, то вы также должны опустить дополнительные квалификаторы в cluster.initial_master_nodes.

См. запуск кластера и настройки обнаружения и формирования кластера.

Настройки размера кучи

По умолчанию Elasticsearch автоматически устанавливает размер кучи JVM на основе ролей узла и общего объёма памяти. Для большинства производственных сред рекомендуется размер по умолчанию.

Автоматический размер кучи требует включённый JDK или, если используется пользовательское расположение JRE, JRE Java 14 или более поздней версии.

При необходимости вы можете переопределить размер по умолчанию, вручную установив размер кучи JVM.

Настройка пути к дампу кучи JVM

По умолчанию Elasticsearch настраивает JVM на создание дампов кучи при исключениях из-за нехватки памяти в стандартном каталоге данных. В пакетах RPM и Debian стандартный каталог данных — /var/lib/elasticsearch. В дистрибутивах Linux и MacOS и Windows каталог data расположен под корнем установки Elasticsearch.

Если этот путь не подходит для получения дампов кучи, измените запись -XX:HeapDumpPath=... в jvm.options:

  • Если вы укажете каталог, JVM сгенерирует имя файла для дампа кучи на основе PID работающей инстанции.
  • Если вы укажете фиксированное имя файла вместо каталога, файл не должен существовать, когда JVM нужно создать дамп кучи при исключении из-за нехватки памяти. В противном случае дамп кучи не удастся.

Настройки ведения журнала GC

По умолчанию Elasticsearch включает журналы сбора мусора (GC). Они настраиваются в jvm.options и выводятся в тот же стандартный каталог, что и журналы Elasticsearch. По умолчанию журналы вращаются каждые 64 МБ и могут занимать до 2 ГБ места на диске.

Вы можете переконфигурировать ведение журнала JVM, используя параметры командной строки, описанные в JEP 158: Объединённый журнал JVM. Если вы не измените файл jvm.options напрямую, конфигурация Elasticsearch по умолчанию применяется дополнительно к вашим настройкам. Чтобы отключить конфигурацию по умолчанию, сначала отключите ведение журнала, указав параметр -Xlog:disable, а затем укажите свои собственные параметры командной строки. Это отключает все ведение журнала JVM, поэтому обязательно изучите доступные параметры и включите всё необходимое.

Чтобы узнать о дополнительных параметрах, не указанных в исходном JEP, см. Enable Logging with the JVM Unified Logging Framework.

Примеры

Измените расположение вывода журнала 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,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/7.17/important-settings.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API