Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Модули индексов ›Распределение фрагментов индексов

Фильтрация распределения фрагментов на уровне индекса

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

Фильтры распределения фрагментов могут быть основаны на пользовательских атрибутах узлов или встроенных атрибутах _name, _host_ip, _publish_ip, _ip, _host, _id, _tier и _tier_preference. Управление жизненным циклом индексов использует фильтры, основанные на пользовательских атрибутах узлов, для определения того, как перераспределять фрагменты при переходе между фазами.

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

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

Включение фильтрации распределения фрагментов на уровне индекса

Чтобы фильтровать на основе пользовательского атрибута узла:

  1. Укажите характеристики фильтра с помощью пользовательского атрибута узла в конфигурационном файле каждого узла elasticsearch.yml. Например, если у вас есть узлы small, medium и big, вы можете добавить атрибут size для фильтрации на основе размера узла.

    node.attr.size: medium

    Вы также можете задать пользовательские атрибуты при запуске узла:

    `./bin/elasticsearch -Enode.attr.size=medium
  2. Добавьте фильтр маршрутизации распределения в индекс. Настройки index.routing.allocation поддерживают три типа фильтров: include, exclude и require. Например, чтобы указать Elasticsearch на распределение фрагментов индекса test на узлы big или medium, используйте index.routing.allocation.include:

    PUT test/_settings
    {
      "index.routing.allocation.include.size": "big,medium"
    }

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

    • Если указаны условия типа require, все они должны быть выполнены
    • Если указаны условия типа exclude, ни одно из них не должно быть выполнено
    • Если указаны условия типа include, должно быть выполнено хотя бы одно из них

    Например, чтобы переместить индекс test на узлы big в rack1, вы можете указать:

    PUT test/_settings
    {
      "index.routing.allocation.require.size": "big",
      "index.routing.allocation.require.rack": "rack1"
    }

Настройки фильтра распределения индексов

index.routing.allocation.include.{attribute}
Присвоить индекс узлу, у которого {attribute} содержит хотя бы одно из перечисленных через запятую значений.
index.routing.allocation.require.{attribute}
Присвоить индекс узлу, у которого {attribute} содержит все перечисленные через запятую значения.
index.routing.allocation.exclude.{attribute}
Присвоить индекс узлу, у которого {attribute} не содержит ни одного из перечисленных через запятую значений.

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

_name

Сопоставление узлов по имени узла

_host_ip

Сопоставление узлов по IP-адресу хоста (IP, связанному с именем хоста)

_publish_ip

Сопоставление узлов по публичному IP-адресу

_ip

Сопоставление либо _host_ip, либо _publish_ip

_host

Сопоставление узлов по имени хоста

_id

Сопоставление узлов по идентификатору узла

_tier

Сопоставление узлов по роли уровня данных узла. Дополнительные сведения см. в разделе фильтрации распределения по уровням данных

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

При указании значений атрибутов можно использовать подстановочные знаки, например:

PUT test/_settings
{
  "index.routing.allocation.include._ip": "192.168.2.*"
}

© 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/shard-allocation-filtering.html

Spec-Zone.ru

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