Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Настройка Elasticsearch ›Настройка Elasticsearch

Узел

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

Каждый узел в кластере по умолчанию может обрабатывать трафик HTTP и транспортного уровня. Транспортный уровень используется исключительно для связи между узлами; HTTP-слой используется клиентами REST.

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

Роли узла

Вы определяете роли узла, установив 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.

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

Узел, способный стать мастером
Узел, имеющий роль master, что делает его подходящим для избрания в качестве главного узла, который управляет кластером.
Узел данных
Узел, имеющий одну из нескольких ролей данных. Узлы данных хранят данные и выполняют операции, связанные с данными, такие как CRUD, поиск и агрегации. Узел с общей ролью data может выполнять любую из специализированных ролей узлов данных.
Узел загрузки
Узел, имеющий роль ingest. Узлы загрузки могут применять конвейер загрузки к документу, чтобы преобразовать и обогатить документ перед индексированием. При высокой нагрузке на загрузку имеет смысл использовать выделенные узлы загрузки и не включать роль ingest для узлов, имеющих роли master или data.
Узел, способный быть удаленным
Узел, имеющий роль remote_cluster_client, что делает его подходящим для работы в качестве удаленного клиента.
Узел машинного обучения
Узел, имеющий роль ml. Для использования функций машинного обучения в вашем кластере должен быть хотя бы один узел машинного обучения. Дополнительную информацию см. в Настройках машинного обучения и Документации по машинному обучению в 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.

Если вы назначаете узел определенному уровню с помощью специализированной роли данных, то вы не должны также назначать ему общую роль 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 ]

Узел только для координации

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

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

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

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

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 необязательна, но настоятельно рекомендуется. В противном случае межкластерный поиск завершается неудачно при использовании в преобразованиях. См. Узел, подходящий для удаленного подключения.

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

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

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

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

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

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

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

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

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

Настройки пути к данным узла

path.data

Каждый узел данных и узел, подходящий для роли мастера, требует доступа к каталогу данных, где будут храниться фрагменты и метаданные индексов и кластера. path.data по умолчанию равен $ES_HOME/data, но может быть настроен в файле конфигурации elasticsearch.yml как абсолютный путь или путь, относящийся к $ES_HOME следующим образом:

path.data:  /var/elasticsearch/data

Как и все настройки узла, его также можно указать в командной строке следующим образом:

./bin/elasticsearch -Epath.data=/var/elasticsearch/data

При использовании дистрибутивов .zip или .tar.gz параметр path.data должен быть настроен для размещения каталога данных за пределами домашнего каталога Elasticsearch, чтобы домашний каталог можно было удалить, не удаляя данные! Дистрибутивы RPM и Debian уже делают это за вас.

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

node.max_local_storage_nodes

Путь к данным data path может использоваться несколькими узлами, даже узлами из разных кластеров. Тем не менее, рекомендуется запускать только один узел Elasticsearch, использующий один и тот же путь к данным. Этот параметр устарел в версии 7.x и будет удален в версии 8.0.

По умолчанию Elasticsearch настроен таким образом, чтобы предотвратить использование одного и того же пути к данным более чем одним узлом. Чтобы разрешить использование одного пути к данным несколькими узлами (например, на вашей машине разработки), используйте настройку node.max_local_storage_nodes и установите ее значение на целое число больше единицы.

Никогда не запускайте разные типы узлов (например, мастер, данные) из одного и того же каталога данных. Это может привести к непредвиденной потере данных.

Другие настройки узла

Дополнительные настройки узла можно найти в Настройка Elasticsearch и Важные настройки Elasticsearch, включая:

  • cluster.name
  • node.name
  • настройки сети

© 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/7.17/modules-node.html

Spec-Zone.ru

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