Облачная платформаAdvanced

Переключение между горячими и холодными данными

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

В кластере Elasticsearch переключение между горячим и холодным хранилищем данных означает распределение данных по узлам с разными уровнями производительности в зависимости от температуры данных (то есть того, как часто к ним обращаются). Цель — достичь оптимальных затрат на хранение и производительности запросов.

  • Горячие данные: часто запрашиваемые данные, требующие низкой задержки, хранятся на высокопроизводительном оборудовании (например, SSD), чтобы обеспечить быструю запись и выполнение запросов.
  • Холодные данные: редко запрашиваемые данные, хранилище с оптимизированными затратами (например, HDD).

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

Как работает функция

Рисунок 1 Как работает переключение холодного/горячего хранилища


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

  • Метки узлов:
    • Узел данных (hot): По умолчанию хранит данные в реальном времени (горячие данные) и поддерживает запросы чтения/записи с высокой конкурентностью.
    • Узел холодных данных (cold): Хранит исторические данные (cold data). Узлы холодных данных используют менее дорогое оборудование и обеспечивают более низкую производительность запросов по сравнению с обычными узлами данных.
  • Распределение индексов: Вы можете настроить шаблоны индексов или напрямую указать имена индексов, чтобы распределять конкретные индексы по узлам данных или узлам холодных данных.

Процедура: Включите узлы холодных данных и настройте шаблон индекса или конкретные параметры индекса для распределения хранилища данных индекса. Кластер автоматически распределяет данные в соответствии с вашими настройками.

Caution

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

Переключение между горячим и холодным хранилищем

  1. Проверьте, включены ли cold data nodes в целевом кластере.

    1. Войдите в консоль управления CSS.
    2. В панели навигации слева выберите Clusters > Elasticsearch.
    3. В списке кластеров нажмите имя целевого кластера. Отобразится страница информации о кластере.
    4. На вкладке Overview проверьте, содержит ли область Node Information информацию о cold data node.
      • Если присутствует информация о cold data nodes, кластер имеет cold data nodes. Перейдите к следующему шагу.
      • Если нет, у кластера нет cold data nodes. Добавьте cold data nodes для кластера и затем перейдите к следующему шагу. Подробные сведения о том, как добавить cold data nodes, см. в Adding New Node Types.

  2. Войдите в консоль Kibana.

    1. На странице информации о кластере нажмите Kibana в правом верхнем углу, чтобы войти в Kibana.
    2. В левой панели навигации выберите Dev Tools.

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

  3. На странице Kibana настройте политики распределения индексов.

    Можно настроить шаблоны индексов или напрямую указать имена индексов для распределения конкретных индексов на data nodes или cold data nodes.

    • Настройка шаблона индекса

      Настройте шаблон индекса для распределения соответствующих индексов на cold или hot data nodes. Например, выполните следующую команду, чтобы сохранять вновь созданные индексы, имя которых начинается с myindex, на cold data nodes. (Команда немного отличается в зависимости от версии Elasticsearch.)

      • Для Elasticsearch 6.x или более новых:
        PUT _template/{template_name}
        {
        "order": 1,
        "index_patterns": "myindex*",
        "settings": {
        "refresh_interval": "30s",
        "number_of_shards": "3",
        "number_of_replicas": "0",
        "routing.allocation.require.box_type": "cold"
        }
        }
      • Для Elasticsearch версии ранее 6.x:
        PUT _template/{template_name}
        {
        "order": 1,
        "template": "myindex*",
        "settings": {
        "index": {
        "refresh_interval": "30s",
        "number_of_shards": "3",
        "number_of_replicas": "0",
        "routing.allocation.require.box_type": "cold"
        }
        }
        }
      Таблица 1 Ключевые параметры

      Параметр

      Тип

      Описание

      index_patterns

      String

      Определяет шаблон соответствия имени индекса.

      Подстановочный символ (*) может использоваться для соответствия нескольким индексам. Например, myindex* указывает на все индексы, имя которых начинается с myindex.

      routing.allocation.require.box_type

      String

      Указывает тип узла данных для размещения шардов.

      Значение может быть:

      • cold: Шарды размещаются на холодных узлах данных.
      • hot: Шарды распределяются по обычным дата‑нодам.

      Если этот параметр не указан, шарды будут равномерно и случайным образом распределены между cold и hot дата‑нодами.

    • Настройка конкретных индексов

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

      PUT {index_name}/_settings
      {
      "index.routing.allocation.require.box_type": "cold"
      }
      Table 2 Описание параметра

      Parameter

      Type

      Description

      index_name

      String

      Указывает один или несколько индексов.

      • Один индекс: Введите имя индекса, например, my_index.
      • Несколько индексов: Введите несколько имён индексов и используйте запятую (,) для их разделения, например, my_index1,my_index2.
      • Подстановочный символ: Используйте подстановочный символ (*) для сопоставления нескольких индексов. Например, myindex* обозначает все индексы, имя которых начинается с myindex.

      routing.allocation.require.box_type

      Строка

      Указывает тип узла данных для распределения шардов.

      Значение может быть:

      • cold: Шарды распределяются по холодным узлам данных.
      • hot: Шарды распределяются по обычным узлам данных.

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

  4. Проверьте переключение между горячим и холодным хранилищем.

    Выполните следующую команду для проверки распределения шардов индекса:

    GET _cat/shards/{index_name}?v

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

    Как показано на следующем рисунке, все шарды индекса myindex хранятся на холодном узле данных css-e668-ess-cold-esn-1-1.

    index shard prirep state docs store ip node
    myindex 1 p STARTED 14085446 17.8gb 192.168.91.188 css-e668-ess- cold -esn-1-1
    myindex 2 p STARTED 14094005 17.9gb 192.168.91.188 css-e668-ess- cold -esn-1-1
    myindex 0 p STARTED 14094742 17.8gb 192.168.91.188 css-e668-ess- cold -esn-1-1

  5. Откатить конфигурацию переключения между холодным и горячим.

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

    PUT {index_name}/_settings
    {
    "index.routing.allocation.require.box_type": null
    }

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

Связанные операции

  • Вы можете масштабировать холодные узлы данных, добавляя или удаляя узлы или их ёмкость хранилища, либо динамически добавляя холодные узлы данных. Подробности см. в Managing Cluster Changes.
  • Если ваш кластер не имеет узлов холодных данных, но вы хотите сократить затраты на хранение, вы можете попробовать использовать разделённое хранилище и вычисления. Для получения подробной информации см. Configuring Decoupled Storage and Compute.