В Elasticsearch можно настроить параметры на уровне кластера, на уровне узла и на уровне индекса. Ниже приводится краткое описание каждого уровня.
Настройки кластера
Эти настройки могут быть:
- Постоянными (Persistent), т.е. применяться при всех перезагрузках, или
- переходными (Transient), т.е. они не переживут полного перезапуска кластера.
При сбросе переходных настроек применяется первое из заданных значений:
- Постоянная настройка
- Значение в конфигурационном файле
- Значение по умолчанию
Порядок приоритета для настроек кластера следующий:
- Переходные настройки кластера
- Постоянные настройки кластера
- Настройки в конфигурационном файле elasticsearch.yml
Примеры
Пример обновления постоянных настроек кластера:
1 2 3 4 5 6 | PUT /_cluster/settings { "persistent" : { "indices.recovery.max_bytes_per_sec" : "500mb" } } |
Пример переходного обновления:
1 2 3 4 5 6 | PUT /_cluster/settings { "transient" : { "indices.recovery.max_bytes_per_sec" : "40mb" } } |
Настройки индексов
Это настройки, которые применяются к отдельным индексам. Для обновления настроек на уровне индексов существует API.
Примеры
Следующий вызов API установит для индекса my_index число шардов-реплик равным 5.
1 2 3 4 5 6 | PUT /my_index/_settings { "index" : { "number_of_replicas" : 5 } } |
Чтобы вернуть параметр к значению по умолчанию, используйте null.
1 2 3 4 5 6 | PUT /my_index/_settings { "index" : { "refresh_interval" : null } } |
Настройки узла
Эти настройки относятся к узлам. Узлы могут выполнять различные роли. К ним относятся роли мастера, данных и координатора. Настройки узла задаются в файле elasticsearch.yml для каждого узла.
Примеры
Установка узла в качестве узла данных (в файле elasticsearch.yml):
1 | node.data: true |
Отключение роли ingest для узла (которая включена по умолчанию):
1 | node.ingest: false |
В производственных кластерах каждый тип узла необходимо запускать на выделенной машине с двумя или более экземплярами каждого из них для обеспечения HA (минимум три для мастер-узлов).
Примечания и полезные сведения
- Изучение настроек кластера и индекса очень важно - это может избавить вас от многих проблем. Например, если вы собираетесь поместить в индекс огромное количество данных, а число реплик шардов установлено, скажем, на 5, то процесс индексирования будет очень медленным, поскольку данные будут реплицироваться одновременно с индексированием. Для ускорения индексирования можно установить число шардов-реплик в 0 путем обновления настроек, а по окончании индексирования вернуть его к исходному числу, используя API настроек.
- Другим полезным примером использования настроек на уровне кластера является ситуация, когда узел только что присоединился к кластеру, а кластер не назначил ему ни одного шарда. Хотя распределение шардов включено по умолчанию на всех узлах, кто-то мог отключить распределение шардов в какой-то момент (например, для выполнения скользящего перезапуска) и забыть включить его снова. Чтобы включить выделение шардов, можно обновить API настроек кластера:
1PUT /_cluster/settings{"transient":{"cluster.routing.allocation.enable": "all"}}. - Лучше задавать общекластерные настройки с помощью API Settings, а не в файле elasticsearch.yml, и использовать файл только для локальных изменений. Это позволит сохранить одинаковые настройки на всех узлах. Однако если случайно задать разные настройки на разных узлах с помощью конфигурационного файла elasticsearch.yml, то заметить эти несоответствия будет сложно.