Эластичный поиск

Лучшие практики Elasticsearch и повышение производительности

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

Лучшие практики Elasticsearch

Мы начнем работать с передовыми методами работы с Elasticsearch и с тем, какие проблемы он может создать, если мы избегаем этих моментов. Давайте начнем.

Всегда определяйте сопоставления ES

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

Например, предположим, что вы индексируете следующий документ:


"id": 1,
"title": "Установить ElasticSearch в Ubuntu",
"ссылка": "https: // linuxhint.com / install-elasticsearch-ubuntu / »,
"date": "2018-03-25"

Таким образом, Elasticsearch пометит поле «дата» как тип «дата». Но когда вы индексируете следующий документ:


"id": 1,
"title": "Лучшие практики и эффективность ES",
"date": "Ожидается"

На этот раз тип поля даты был изменен, и ES выдаст ошибку и не позволит проиндексировать ваш документ. Чтобы упростить задачу, вы можете проиндексировать несколько документов, посмотреть, какие поля индексируются ES, и получить сопоставление с этого URL-адреса:

GET / index_name / doc_type / _mapping

Таким образом, вам также не придется строить полное отображение.

Флаги производства

Имя кластера по умолчанию, который запускает ES, называется эластичный поиск. Когда у вас много узлов в кластере, рекомендуется сохранять как можно более согласованные флаги именования, например:

кластер.имя: app_es_production
узел.имя: app_es_node_001

Помимо этого, также имеют значение настройки восстановления для узлов. Предположим, что некоторые узлы в кластере перезагружаются из-за сбоя, а некоторые узлы перезапускаются немного позже других узлов. Чтобы сохранить согласованность данных между всеми этими узлами, нам нужно будет запустить программу согласованности, которая будет поддерживать все кластеры в согласованном состоянии.

шлюз.Recovery_after_nodes: 10

Также полезно заранее сообщить кластеру, сколько узлов будет присутствовать в кластере и сколько времени им потребуется:

шлюз.ожидаемые_узлы: 20
шлюз.recovery_after_time: 7 мин

При правильной конфигурации восстановление, которое заняло бы часы, может занять всего минуту и ​​может сэкономить много денег любой компании.

Предоставление емкости

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

Конечно, нет никаких конкретных рекомендаций по достижению необходимых цифр, но мы можем предпринять некоторые шаги, которые дадут нам хорошую идею. Один из шагов будет заключаться в том, чтобы моделировать вариант использования. Создайте кластер ES и загрузите в него почти такую ​​же скорость данных, как вы ожидали бы при настройке производства. Концепция чего-либо начните с большого и уменьшите масштаб также может помочь вам быть последовательным в том, сколько места требуется.

Большие шаблоны

Когда вы определяете проиндексированные большие шаблоны, вы всегда будете сталкиваться с проблемами, связанными с синхронизацией шаблона между вашими различными узлами кластера. Всегда помните, что шаблон придется переопределять всякий раз, когда происходит изменение модели данных. Гораздо лучше сохранить шаблоны как динамические. Динамические шаблоны автоматически обновляют сопоставления полей на основе сопоставлений, которые мы определили ранее, и новых полей. Обратите внимание: ничто не заменит минимальный размер шаблонов.

2 Использование mlockall на серверах Ubuntu

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

бутстрап.mlockall: правда

В ES v5.x + версии это свойство изменено на:

бутстрап.memory_lock: истина

Если вы используете это свойство, просто убедитесь, что вы предоставляете ES с достаточно большой памятью кучи, используя -DXmx вариант или ES_HEAP_SIZE.

Минимизировать обновления карт

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

индексы.кластер.send_refresh_mapping: ложь

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

Оптимизированный пул потоков

Узлы ES ​​имеют много пулов потоков, чтобы улучшить управление потоками внутри узла. Но есть ограничения на то, сколько данных может обрабатывать каждый поток. Чтобы отслеживать это значение, мы можем использовать свойство ES:

катушка с резьбой.масса.queue_size: 2000

Это сообщает ES количество запросов в осколке, которые могут быть поставлены в очередь для выполнения на узле, когда нет потока, доступного для обработки запроса. Если количество задач превышает это значение, вы получите RemoteTransportException. Чем выше это значение, тем больший объем кучи потребуется на вашем узловом компьютере, а также будет использоваться куча JVM. Кроме того, вы должны держать свой код готовым на случай, если возникнет это исключение.

Заключение

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

Лучшие игры с командной строкой для Linux
Командная строка - не только ваш главный союзник при использовании Linux - она ​​также может быть источником развлечений, потому что вы можете использ...
Лучшие приложения для сопоставления геймпадов для Linux
Если вам нравится играть в игры на Linux с помощью геймпада вместо стандартной системы ввода с клавиатуры и мыши, для вас есть несколько полезных прил...
Полезные инструменты для геймеров Linux
Если вам нравится играть в игры на Linux, скорее всего, вы использовали приложения и утилиты, такие как Wine, Lutris и OBS Studio, для улучшения игров...