Как настроить все роли узлов OpenSearch (мастер, дата, координатор...)

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

Что такое роли узлов OpenSearch?

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

Информация о кластере для таких узлов будет выглядеть следующим образом:

роли узлов OpenSearch

Типы ролей узлов

  1. Master (обновлен до cluster_manager, начиная с версии 1.3)
  2. Data
  3. Search
  4. Coordinating
  5. Ingest
  6. Dynamic

Мастер-узел (он же cluster_manager)

Узел, которому мы назначаем роль мастера, называется "мастер"-узлом. Ведущий узел управляет всеми операциями кластера, такими как создание/удаление индекса, и отслеживает все доступные узлы в кластере. При создании хранилищ мастер-узел определяет, на каком узле должно быть размещено каждое хранилище. Этот узел не будет обрабатывать запросы пользователей.

Когда происходит избрание мастера? Процесс выборов происходит во время запуска или при выходе из строя текущего ведущего узла. Любой узел, имеющий право голоса, за исключением узла "Только голосование", может стать ведущим узлом в процессе выборов ведущего.

Чтобы задать роль узла, отредактируйте его файл "opensearch.yml" и добавьте следующую строку:

Примечание: Роль узла OpenSearch "master" была переименована в "cluster_manager", начиная с версии 1.3.x и далее, а роль узла "master-eligible" была переименована в "cluster_manager-eligible". Вы можете использовать следующее:

Узел данных

Узел, которому мы назначаем роль данных, называется узлом данных. Узел данных хранит индексированные данные и выполняет CRUD, поиск и агрегирование (операции, связанные с данными).

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

Существуют специализированные роли данных, такие как data_content, data_hot, data_cold, data_warm и data_frozen, которые могут быть использованы в многоуровневой архитектуре развертывания. В общем случае нет необходимости настраивать все специализированные роли, а можно просто использовать роль данных. Если вы хотите настроить архитектуру hot cold, обратитесь к этому руководству.

Чтобы задать роль узла, отредактируйте его файл "opensearch.yml" и добавьте следующую строку:

Горячий узел данных

Горячие узлы данных являются частью горячего уровня. Эта роль не нужна, если вы не хотите настраивать архитектуру "горячий-холодный".

Узлы "горячего" уровня в основном используются для хранения наиболее часто обновляемых и свежих данных. Такие узлы данных должны быть быстрыми как при поиске, так и при индексировании. Поэтому для них требуется больше оперативной памяти, процессора и быстрое хранилище.

Чтобы задать эту роль узла, отредактируйте файл "opensearch.yml" узла и добавьте следующую строку:

Вместо того чтобы назначать эту роль как node.role, как в Elasticsearch, в OpenSearch она назначается как атрибут.

Теплый узел данных

Теплые узлы данных являются частью теплого яруса. Эта роль не нужна, если вы не хотите настраивать архитектуру "горячий-холодный".

Узлы теплого уровня используются для хранения данных временных рядов, которые реже запрашиваются и редко обновляются. Как правило, узлы теплого уровня имеют больший объем памяти по отношению к оперативной памяти и процессору.

Чтобы задать эту роль узла, отредактируйте файл "opensearch.yml" узла и добавьте следующую строку:

Вместо того чтобы назначать эту роль как node.role, как в Elasticsearch, в OpenSearch она назначается как атрибут.

Холодный узел данных

Холодные узлы данных являются частью холодного уровня. Эта роль не нужна, если вы не хотите настраивать архитектуру "горячий-холодный".

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

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

Чтобы задать эту роль узла, отредактируйте его файл "opensearch.yml" и добавьте следующую строку:

Вместо того чтобы назначать роль узла как node.role, как в Elasticsearch, в OpenSearch она назначается как атрибут.

В большинстве сценариев достаточно использовать только hot-warm. У вас должны быть веские причины для добавления холодного уровня, поскольку он также увеличивает сетевой трафик между узлами и повышает стоимость вашего кластера.

Узел поиска

Эта роль не нужна, если вы не хотите использовать функцию моментальных снимков (снапшотов) с возможностью поиска.

Данные, которые запрашиваются редко и никогда не обновляются, могут быть перемещены из горячего/теплого/холодного яруса на узел поиска.

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

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

Чтобы задать эту роль узла, отредактируйте файл "opensearch.yml" узла и добавьте следующую строку:

Координирующий узел

Координационные узлы выполняют роль балансировщиков нагрузки. Этот тип узлов направляет запросы к узлам данных и обрабатывает массовое индексирование, распределяя запросы.

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

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

Чтобы сделать узел "только координирующим", добавьте в файл "opensearch.yml" следующую конфигурацию:

Узел индексации

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

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

Чтобы сделать узел "ingest"-узлом, добавьте в файл "opensearch.yml" следующую конфигурацию:

Динамический узел

Динамический узел доступен в Opensearch версии 1.3.x и выше. Он соответствует узлу Machine Learning в Elasticsearch. Делегирует определенный узел для выполнения пользовательских работ, например, задач машинного обучения (ML), не потребляя ресурсов узлов данных и, следовательно, не влияя на функциональность OpenSearch.

Для настройки динамического узла (узла машинного обучения) добавьте в файл "opensearch.yml" следующую конфигурацию:

Заключение

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий