Elasticsearch
Конфигурация Elasticsearch
Поиск…
замечания
Elasticsearch поставляется с набором параметров по умолчанию, которые обеспечивают хороший результат для разработки. Неявное утверждение заключается в том, что оно не обязательно отлично подходит для производства, которое должно быть адаптировано для ваших собственных нужд и поэтому не может быть предсказано.
Настройки по умолчанию позволяют легко загружать и запускать несколько узлов на одном компьютере без каких-либо изменений конфигурации.
Где настройки?
Внутри каждой установки Elasticsearch есть config/elasticsearch.yml . Вот где живут следующие настройки :
-
cluster.name- Имя кластера, с которым соединяется узел. Все узлы в одном кластере должны иметь одинаковое имя.
- В настоящее время по умолчанию используется
elasticsearch.
-
node.*-
node.name- Если не указано, случайное имя будет генерироваться каждый раз при запуске узла . Это может быть весело, но это не хорошо для производственных сред.
- Имена не обязательно должны быть уникальными, но они должны быть уникальными.
-
node.master- Логическая настройка. Когда
true, то это означает , что узел имеет право на получение главного узла , и он может быть избран главный узел. - Значение по умолчанию равно
true, что означает, что каждый узел является подходящим основным узлом.
- Логическая настройка. Когда
-
node.data- Логическая настройка. Когда
true, это означает, что узел хранит данные и обрабатывает активность поиска. - Значение по умолчанию равно
true.
- Логическая настройка. Когда
-
-
path.*-
path.data- Место, где файлы записываются для узла. Все узлы используют этот каталог для хранения метаданных, но узлы данных также используют его для хранения / индексирования документов.
- По умолчанию
./data.- Это означает, что
dataбудут созданы для вас в качестве одноранговой директории дляconfigвнутри каталога Elasticsearch.
- Это означает, что
-
path.logs- Место, где записываются файлы журнала.
- По умолчанию.
./logs.
-
-
network.*network.host- По умолчанию
_local_, который является фактическиlocalhost.- Это означает, что по умолчанию узлы не могут быть переданы извне текущего компьютера!
- По умолчанию
network.bind_host- Потенциально массив, это говорит Elasticsearch, какие адреса текущей машины также связывают сокеты.
- Именно этот список позволяет машинам за пределами машины (например, другим узлам кластера) разговаривать с этим узлом.
- По умолчанию используется
network.host.
- Потенциально массив, это говорит Elasticsearch, какие адреса текущей машины также связывают сокеты.
network.publish_host- Необычный хост, который используется для рекламы другим узлам, как наилучшим образом общаться с этим узлом.
- При поставке массива в
network.bind_hostэто должен быть один хост, предназначенный для межузловой связи.
- При поставке массива в
- По умолчанию используется network.host`.
- Необычный хост, который используется для рекламы другим узлам, как наилучшим образом общаться с этим узлом.
-
discovery.zen.*-
discovery.zen.minimum_master_nodes- Определяет кворум для всеобщих выборов. Это должно быть установлено с использованием этого уравнения:
(M / 2) + 1гдеM- количество подходящих основных узлов (узлы с использованиемnode.master: trueнеявно или явно). - По умолчанию
1, что справедливо только для кластера с одним узлом!
- Определяет кворум для всеобщих выборов. Это должно быть установлено с использованием этого уравнения:
-
discovery.zen.ping.unicast.hosts- Механизм присоединения этого узла к остальной части кластера.
- Это должно отображать подходящие основные узлы, чтобы узел мог найти остальную часть кластера.
- Значение, которое следует использовать здесь, это
network.publish_hostиз этих других узлов. - По умолчанию используется
localhost, что означает, что он смотрит только на локальный компьютер для объединения кластера.
-
Какие существуют настройки?
Elasticsearch предоставляет три различных типа настроек:
- Настройки кластера
- Это настройки, которые применяются ко всему в кластере, такие как все узлы или все индексы.
- Настройки узла
- Это настройки, которые применяются только к текущему узлу.
- Настройки индекса
- Это настройки, которые относятся только к индексу.
В зависимости от настройки, это может быть:
- Изменено динамически во время выполнения
- Изменен после перезапуска (закрытие / открытие) индекса
- Некоторые настройки уровня индекса не требуют, чтобы индекс был закрыт и снова открыт, но может потребовать, чтобы индекс был принудительно повторно объединен для применяемого параметра.
- Примером такого типа настроек является уровень сжатия индекса. Его можно изменять динамически, но только новые сегменты используют это изменение. Поэтому, если индекс не изменится, он никогда не воспользуется этим изменением, если вы не заставите индекс воссоздать свои сегменты.
- Некоторые настройки уровня индекса не требуют, чтобы индекс был закрыт и снова открыт, но может потребовать, чтобы индекс был принудительно повторно объединен для применяемого параметра.
- Изменено после перезапуска узла
- Изменен после перезапуска кластера
- Никогда не менялся
Всегда проверяйте документацию для своей версии Elasticsearch на то, что вы можете или не можете сделать с настройкой.
Как я могу применить настройки?
Вы можете установить настройки несколькими способами, некоторые из которых не предлагаются:
- Аргументы командной строки
В Elasticsearch 1.x и 2.x вы можете отправить большинство настроек в качестве свойств Java System с префиксом es. :
$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`
В Elasticsearch 5.x это изменяется, чтобы избежать использования свойств Java-системы, вместо этого используя собственный тип аргумента с -E , -Des. :
$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`
Такой подход к применению настроек отлично работает при использовании таких инструментов, как Puppet, Chef или Ansible для запуска и остановки кластера. Однако при работе он работает очень плохо.
- Настройки YAML
- Показаны в примерах
- Динамические настройки
- Показаны в примерах
Порядок, в котором применяются настройки, находится в порядке наибольшей динамичности:
- Временные настройки
- Постоянная настройка
- Настройки командной строки
- Настройки YAML (статические)
Если настройка установлена дважды, один раз на любом из этих уровней, то самый высокий уровень вступает в силу.
Настройки статического эластинга
Elasticsearch использует файл конфигурации YAML (еще один язык разметки), который можно найти внутри каталога Elasticsearch по умолчанию (установки RPM и DEB меняют это местоположение между прочим ).
Вы можете установить основные настройки в config/elasticsearch.yml :
# Change the cluster name. All nodes in the same cluster must use the same name!
cluster.name: my_cluster_name
# Set the node's name using the hostname, which is an environment variable!
# This is a convenient way to uniquely set it per machine without having to make
# a unique configuration file per node.
node.name: ${HOSTNAME}
# ALL nodes should set this setting, regardless of node type
path.data: /path/to/store/data
# This is a both a master and data node (defaults)
node.master: true
node.data: true
# This tells Elasticsearch to bind all sockets to only be available
# at localhost (default)
network.host: _local_
Постоянные настройки динамического кластера
Если вам нужно применить настройку динамически после того, как кластер уже запущен, и его можно установить динамически, вы можете установить его с _cluster/settings API-интерфейса _cluster/settings .
Постоянными настройками являются один из двух типов кластерного уровня, которые могут применяться. Устойчивая установка выживет полный перезапуск кластера.
Примечание. Не все настройки могут применяться динамически. Например, имя кластера не может быть переименовано динамически. Большинство настроек уровня узла нельзя установить динамически (поскольку они не могут быть нацелены индивидуально).
Это не API для установки параметров уровня индекса. Вы можете сказать, что это параметр уровня индекса, потому что он должен начинаться с index. , Настройки, имена которых указаны в виде indices. являются параметрами кластера, поскольку они применяются ко всем индексам.
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
Предупреждение . В Elasticsearch 1.x и 2.x вы не можете отключить постоянную настройку.
К счастью, это улучшилось в Elasticsearch 5.x, и теперь вы можете удалить параметр, установив его в null :
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
Неустановленная настройка вернется к своему значению по умолчанию или к любому значению, заданному на более низком уровне приоритета (например, настройке командной строки).
Переходные динамические настройки кластера
Если вам нужно применить настройку динамически после того, как кластер уже запущен, и его можно установить динамически, вы можете установить его с _cluster/settings API-интерфейса _cluster/settings .
Параметры переходного процесса являются одним из двух типов кластерного уровня, которые могут применяться. Параметр переходного процесса не сможет полностью перезагрузить кластер.
Примечание. Не все настройки могут применяться динамически. Например, имя кластера не может быть переименовано динамически. Большинство настроек уровня узла нельзя установить динамически (поскольку они не могут быть нацелены индивидуально).
Это не API для установки параметров уровня индекса. Вы можете сказать, что это параметр уровня индекса, потому что он должен начинаться с index. , Настройки, имена которых указаны в виде indices. являются параметрами кластера, поскольку они применяются ко всем индексам.
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
Предупреждение . В Elasticsearch 1.x и 2.x вы не можете отключить настройки переходного процесса без полного перезапуска кластера.
К счастью, это улучшилось в Elasticsearch 5.x, и теперь вы можете удалить параметр, установив его в null:
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": null
}
}
Неустановленная настройка вернется к своему значению по умолчанию или любому значению, заданному на более низком уровне приоритета (например, persistent настройкам).
Настройки индекса
Параметры индекса - это те настройки, которые относятся к одному индексу. Такие настройки начинаются с index. , Исключением из этого правила являются number_of_shards и number_of_replicas , которые также существуют в виде index.number_of_shards и index.number_of_replicas .
Как следует из названия, настройки уровня индекса применяются к одному индексу. Некоторые настройки должны применяться во время создания, потому что они не могут быть изменены динамически, например параметр index.number_of_shards , который контролирует количество первичных обрывов для индекса.
PUT /my_index
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 1
}
}
или, в более сжатом формате, вы можете комбинировать ключевые префиксы в каждом . :
PUT /my_index
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}
В приведенных выше примерах будет создан индекс с предоставленными настройками. Вы можете динамически изменять настройки для каждого индекса, используя _settings точку _settings . Например, здесь мы динамически изменяем настройки медленного режима только для уровня предупреждения:
PUT /my_index/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
Предупреждение : Elasticsearch 1.x и 2.x не очень строго проверяли имена установок уровня индекса. Если у вас была опечатка или просто составлена настройка, тогда она слепо приняла бы ее, но в противном случае игнорировала бы ее. Elasticsearch 5.x строго проверяет имена параметров и отклоняет любую попытку применить параметры индекса с неизвестными настройками (из-за опечатки или отсутствующего плагина). Оба утверждения относятся к динамически изменяющимся настройкам индекса и во время создания.
Динамические параметры индекса для нескольких индексов одновременно
Вы можете применить те же изменения, что указаны в примере « Index Settings ко всем существующим индексам с одним запросом или даже подмножеством из них:
PUT /*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
или же
PUT /_all/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
или же
PUT /_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
Если вы предпочитаете более выборочно делать это, то вы можете выбрать несколько без подачи всех:
PUT /logstash-*,my_other_index,some-other-*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}