В какой-то момент времени возможно вы придёте к тому, что захотите контролировать на каком именно узле должны находиться определённые shards. Для этого вы как раз можете использовать функцию перемещения shard от горячего хоста к теплому. Это также поможет вам хранить уже не особо нужные данные на более дешевом оборудовании, которое обрабатывает только READ-ONLY операции и делает это не так часто, если мы говорим о теплых узлах. Горячие узлы наоборот должны максимально быть заточены на запись и обработку данных, при этом не имея большого дискового пространства (конечно всё зависит от количества данных).

Для горячих узлов важными серверными компонентами являются CPU и IO операции.

Фильтрация Shard

Для того чтобы задать на каком именно узле Elasticsearch хранить shards используются:

  • node.attr - задаёт наименование узла
  • index.routing.allocation - назначает на какие узлы перемещать shards

Параметры index.routing.allocation поддерживают три типа фильтров: include, exclude и require.

тип действие
include Присвойте индекс узлу, имя (node.attr) которого имеет хотя бы одно из значений, разделенных запятыми.
require Присвойте индекс узлу, имя (node.attr) которого имеет все значения, разделенные запятыми.
exclude Присвойте индекс узлу, имя (node.attr) которого не имеет значений, разделенных запятыми.

Представим ситуации что мы разбили наши узлы на 3 категории по дисковому месту (size) и хотим, чтобы my-index хранился именно на среднем по месту узле (medium).

1.Для начала зададим всем атрибут size с разными значениями для всех узлов.

sudo vim /etc/elasticsearch/elasticsearch.yml
node.attr.size: big
node.attr.size: small
node.attr.size: medium

2.Далее заставляем index my-index храниться на узле со значением size: medium

PUT my-index 
{
  "settings": {
    "index.routing.allocation.require.size": "medium"
  }  
}

У каждого узла может быть множество атрибутов заданных с помощью node.attr. Соответственно вы можете использовать множественную фильтрации для index.routing.allocation.

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

  • _name - Сопоставляет узлы по имени узла
  • _host_ip - Сопоставление узлов по IP-адресу хоста
  • _publish_ip - Сопоставление узлов по публичному IP-адресу
  • _ip - Соответствует либо _host_ip, либо _publish_ip
  • _host - Сопоставляет узлы по имени хоста
  • _id - Сопоставляет узлы по id

В итоге

  • Вы можете настраивать узлы в кластере для использования архитектуры горячего и теплого типа.
  • Используйте горячие узлы для индексации
  • Используйте теплые узлы для старых индексов, доступных только для чтения
  • Контроль расположения index называется Shard filtering