Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›Архитектура хранилища данных

Роли узлов

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

Каждый узел выполняет одну или несколько ролей. Роли контролируют поведение узла в кластере.

Установить роли узла

Вы определяете роли узла, установив node.roles в elasticsearch.yml. Если вы установите node.roles, узлу будут назначены только указанные вами роли. Если вы не установите node.roles, узлу будут назначены следующие роли:

  • master
  • data
  • data_content
  • data_hot
  • data_warm
  • data_cold
  • data_frozen
  • ingest
  • ml
  • remote_cluster_client
  • transform

Если вы устанавливаете node.roles, убедитесь, что вы указали все необходимые роли узлов для вашего кластера. Каждый кластер требует следующих ролей узлов:

  • master
  • data_content и data_hot
    ИЛИ
    data

Некоторые функции Elastic Stack также требуют определенных ролей узлов:

  • Поиск и репликация между кластерами требуют роли remote_cluster_client.
  • Мониторинг стека и конвейеры обработки требуют роли ingest.
  • Fleet, приложение Elastic Security и преобразования требуют роли transform. Роль remote_cluster_client также требуется для использования межкластерного поиска с этими функциями.
  • Функции машинного обучения, такие как обнаружение аномалий, требуют роли ml.

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

Изменить роль узла

Каждый узел данных сохраняет на диске следующую информацию:

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

Аналогично, каждый узел, подходящий для роли мастер, сохраняет на диске следующую информацию:

  • метаданные индекса для каждого индекса в кластере, и
  • метаданные всего кластера, такие как настройки и шаблоны индексов.

Каждый узел проверяет содержимое пути к данным при запуске. Если он обнаружит неожиданные данные, он откажется от запуска. Это предотвращает импорт нежелательных висячих индексов, что может привести к проблемам с кластером. Точнее, узлы без роли data откажутся от запуска, если при запуске они найдут любые данные фрагмента на диске, а узлы без ролей master и data откажутся от запуска, если у них есть какие-либо метаданные индекса на диске при запуске.

Изменить роли узла можно, скорректировав файл elasticsearch.yml и перезапустив его. Это известно как переназначение узла. Чтобы удовлетворить проверкам на неожиданные данные, описанные выше, вам необходимо выполнить дополнительные шаги для подготовки узла к переназначению при запуске узла без ролей data или master.

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

Если выполнить эти дополнительные шаги невозможно, вы можете использовать инструмент elasticsearch-node repurpose для удаления избыточных данных, которые мешают запуску узла.

Доступные роли узлов

Ниже приведен список ролей, которые может выполнять узел в кластере. Узел может иметь одну или несколько ролей.

  • Узел, подходящий для роли мастер (master): Узел, который может быть избран в качестве мастер-узла, который управляет кластером.
  • Узел данных (data, data_content, data_hot, data_warm, data_cold, data_frozen): Узел, выполняющий одну из нескольких ролей данных. Узлы данных хранят данные и выполняют операции, связанные с данными, такие как CRUD, поиск и агрегации. Вы можете использовать несколько ролей данных в кластере, чтобы реализовать уровни данных.
  • Узел обработки (ingest): Узлы обработки могут применять конвейер обработки к документу для преобразования и обогащения документа перед индексированием. При высокой нагрузке на обработку целесообразно использовать специализированные узлы обработки и не включать роль ingest на узлах, имеющих роли master или data.
  • Узел, подходящий для удалённого подключения (remote_cluster_client): Узел, который может выступать в качестве удаленного клиента.
  • Узел машинного обучения (ml): Узел, который может выполнять функции машинного обучения. Если вы хотите использовать функции машинного обучения, в вашем кластере должен быть хотя бы один узел машинного обучения. Дополнительную информацию см. в настройках машинного обучения и machine learning в Elastic Stack.
  • Узел преобразования (transform): Узел, который может выполнять преобразования. Если вы хотите использовать преобразования, в вашем кластере должен быть хотя бы один узел преобразования. Дополнительную информацию см. в настройках преобразования и преобразовании данных.

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

Запросы, такие как запросы поиска или массовые запросы индексирования, могут включать данные, хранящиеся на разных узлах данных. Например, запрос поиска выполняется в двух фазах, которые координируются узлом, который получает клиентский запрос — координирующим узлом.

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

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

Узел, подходящий для роли мастер

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

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

Узлы-мастера должны иметь каталог path.data, содержимое которого сохраняется при перезапуске, как и узлы данных, потому что именно здесь хранятся метаданные кластера. Метаданные кластера описывают, как читать данные, хранящиеся на узлах данных, поэтому если они потеряны, то данные, хранящиеся на узлах данных, нельзя прочитать.

Выделенный узел, подходящий для роли мастер

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

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

Для создания узла, специализированного на роли мастера, установите:

node.roles: [ master ]
Узел, имеющий право быть мастером, но только для голосования

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

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

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

node.roles: [ data, master, voting_only ]

Только узлы с ролью master могут быть отмечены как имеющие роль voting_only.

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

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

node.roles: [ master, voting_only ]

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

Узлы данных

Узлы данных хранят фрагменты, содержащие индексированные вами документы. Узлы данных обрабатывают операции, связанные с данными, такие как CRUD, поиск и агрегации. Эти операции являются ресурсоёмкими для ввода-вывода, памяти и ЦП. Важно отслеживать эти ресурсы и добавлять больше узлов данных, если они перегружены.

Основное преимущество наличия специализированных узлов данных — это разделение ролей мастера и данных.

В многоуровневой архитектуре развертывания вы используете специализированные роли данных для назначения узлов данных определённым уровням: data_content, data_hot, data_warm, data_cold или data_frozen. Узел может принадлежать нескольким уровням.

Если вы хотите включить узел во все уровни или если ваш кластер не использует несколько уровней, то вы можете использовать общую роль data.

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

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

Общий узел данных

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

Для создания специализированного общего узла данных установите:

node.roles: [ data ]
Узел данных содержимого

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

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

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

Для создания специализированного узла содержимого установите:

node.roles: [ data_content ]
Узел горячих данных

Узлы горячих данных являются частью горячего уровня. Горячий уровень — это входная точка Elasticsearch для временных рядов данных и хранит ваши самые последние и наиболее часто используемые временные ряды данных. Узлы на горячем уровне должны быть быстрыми как для чтения, так и для записи, что требует больше аппаратных ресурсов и более быстрого хранилища (SSD). Для устойчивости индексы на горячем уровне должны быть настроены на использование одной или нескольких реплик.

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

Для создания специализированного узла горячих данных установите:

node.roles: [ data_hot ]
Узел тёплых данных

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

Для создания специализированного узла тёплых данных установите:

node.roles: [ data_warm ]
Узел холодных данных

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

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

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

Для создания специализированного узла холодных данных установите:

node.roles: [ data_cold ]
Узел замороженных данных

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

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

Для создания специализированного узла замороженных данных установите:

node.roles: [ data_frozen ]

Узел обработки

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

Для создания специализированного узла обработки установите:

node.roles: [ ingest ]

Только узел координации

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

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

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

Для создания выделенного узла координации установите:

node.roles: [ ]

Узел, пригодный для удалённого доступа

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

node.roles: [ remote_cluster_client ]

Узел машинного обучения

Узлы машинного обучения выполняют задачи и обрабатывают запросы к API машинного обучения. Дополнительную информацию см. в настройках машинного обучения.

Для создания выделенного узла машинного обучения установите:

node.roles: [ ml, remote_cluster_client]

Роль remote_cluster_client является необязательной, но настоятельно рекомендуется. В противном случае межкластерный поиск завершается неудачей при использовании в задачах машинного обучения или каналах данных. Если вы используете межкластерный поиск в своих задачах обнаружения аномалий, роль remote_cluster_client также требуется на всех узлах, пригодных для роли мастера. В противном случае канал данных не может быть запущен. См. узел, пригодный для удалённого доступа.

Узел трансформаций

Узлы трансформаций выполняют трансформации и обрабатывают запросы к API трансформаций. Дополнительную информацию см. в настройках трансформаций.

Для создания выделенного узла трансформаций установите:

node.roles: [ transform, remote_cluster_client ]

Роль remote_cluster_client является необязательной, но настоятельно рекомендуется. В противном случае межкластерный поиск завершается неудачей при использовании в трансформациях. См. узел, пригодный для удалённого доступа.

© 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/8.17/node-roles-overview.html

Spec-Zone.ru

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