Фильтрация распределения фрагментов на уровне индекса
Вы можете использовать фильтры распределения фрагментов, чтобы контролировать, где Elasticsearch распределяет фрагменты конкретного индекса. Эти фильтры на уровне индекса применяются совместно с фильтрацией распределения фрагментов на уровне кластера и учётом особенностей распределения фрагментов.
Фильтры распределения фрагментов могут быть основаны на пользовательских атрибутах узлов или встроенных атрибутах _name, _host_ip, _publish_ip, _ip, _host, _id, _tier и _tier_preference. Управление жизненным циклом индексов использует фильтры, основанные на пользовательских атрибутах узлов, для определения того, как перераспределять фрагменты при переходе между фазами.
Настройки cluster.routing.allocation являются динамическими, что позволяет перемещать индексы в реальном времени с одного набора узлов на другой. Фрагменты перемещаются только в том случае, если это возможно без нарушения других ограничений маршрутизации, таких как запрет размещения первичного и реплицированного фрагмента на одном узле.
Например, вы можете использовать пользовательский атрибут узла для указания характеристик производительности узла и использовать фильтрацию распределения фрагментов для маршрутизации фрагментов конкретного индекса на наиболее подходящий класс оборудования.
Включение фильтрации распределения фрагментов на уровне индекса
Чтобы фильтровать на основе пользовательского атрибута узла:
-
Укажите характеристики фильтра с помощью пользовательского атрибута узла в конфигурационном файле каждого узла
elasticsearch.yml. Например, если у вас есть узлыsmall,mediumиbig, вы можете добавить атрибутsizeдля фильтрации на основе размера узла.node.attr.size: medium
Вы также можете задать пользовательские атрибуты при запуске узла:
`./bin/elasticsearch -Enode.attr.size=medium
-
Добавьте фильтр маршрутизации распределения в индекс. Настройки
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}не содержит ни одного из перечисленных через запятую значений.
Настройки распределения индексов поддерживают следующие встроенные атрибуты:
| | Сопоставление узлов по имени узла |
| | Сопоставление узлов по IP-адресу хоста (IP, связанному с именем хоста) |
| | Сопоставление узлов по публичному IP-адресу |
| | Сопоставление либо |
| | Сопоставление узлов по имени хоста |
| | Сопоставление узлов по идентификатору узла |
| | Сопоставление узлов по роли уровня данных узла. Дополнительные сведения см. в разделе фильтрации распределения по уровням данных |
Фильтрация _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