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

Разделение хранилища и вычислений с использованием ISM

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

В сценариях аналитики журналов и мониторинга затраты на хранение исторических данных со временем накапливаются. Однако большинство «холодных» данных запрашивается лишь изредка для аудита или отката. Хранение таких данных на дорогих локальных SSD в течение длительных периодов не имеет экономического смысла. Чтобы сбалансировать затраты на хранение с требованиями длительного удержания, CSS предоставляет функцию разделения хранилища и вычислений для кластеров Elasticsearch. При настройке политики index state management (ISM) в сочетании с index freezing можно автоматически перемещать подходящие индексы с локальных SSD в объектное хранилище с более низкой стоимостью. Данные остаются доступными для поиска, хотя задержка запросов может увеличиться.

Решение

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

  • Горячая фаза: данные хранятся на высокопроизводительных локальных дисках для поддержки операций чтения и записи с высокой конкурентностью.
  • Тёплая фаза: индекс заморожен, а данные выгружаются в OBS. На локальных дисках сохраняются только необходимые метаданные, а запросы направляются напрямую в OBS. (Первоначальные запросы могут иметь более высокую задержку, но последующие запросы могут ускоряться за счёт использования кэша.)
  • Фаза удаления: когда срок хранения данных истекает, индекс автоматически удаляется для освобождения места в хранилище.

В этом примере для кластера Elasticsearch создаётся политика ISM. Согласно этой политике, вновь созданный индекс автоматически замораживается через три дня, при этом данные выгружаются в OBS; и удаляется через семь дней.

Рисунок 1 Разделение хранилища и вычислений


Ограничения

Только кластеры Elasticsearch 7.6.2 и 7.10.2 поддерживают разделённое хранилище и вычисления.

Настройка политики ISM

  1. Войдите в Kibana и перейдите на страницу выполнения команд.
    1. Войдите в консоль управления CSS.
    2. В панели навигации слева выберите Clusters > Elasticsearch.
    3. В списке кластеров найдите целевой кластер и нажмите Kibana в столбце Operation, чтобы войти в консоль Kibana.
    4. В левой панели навигации выберите Dev Tools.

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

  2. Определите политику ISM для автоматизации разделения хранения и вычислений для индексов.

    Например, создайте политику с именем hot_warm_policy. Согласно этой политике, вновь созданный индекс автоматически замораживается через три дня, данные выгружаются в OBS; и полностью удаляется через семь дней.

    PUT _opendistro/_ism/policies/hot_warm_policy
    {
    "policy": {
    "description": "hot warm archive delete workflow",
    "error_notification": null,
    "default_state": "hot",
    "states": [
    {
    "name": "hot",
    "actions": [],
    "transitions": [
    {
    "state_name": "warm",
    "conditions": {
    "min_index_age": "3d"
    }
    }
    ]
    },
    {
    "name": "warm",
    "actions": [
    {
    "freeze_low_cost": {} // Freeze the index.
    }
    ],
    "transitions": [
    {
    "state_name": "delete",
    "conditions": {
    "min_index_age": "7d"
    }
    }
    ]
    },
    {
    "name": "delete",
    "actions": [
    {
    "delete": {}
    }
    ],
    "transitions": []
    }
    ]
    }
    }
  3. Свяжите политику с шаблоном индекса, чтобы новые индексы, созданные с использованием этого шаблона, автоматически наследовали эту политику.

    Например, создайте шаблон индекса template_hot_warm, который определяет, что вновь созданные индексы, имя которых начинается с data, автоматически связываются с политикой ISM hot_warm_policy.

    PUT _template/template_hot_warm
    {
    "index_patterns": "data*",
    "settings": {
    "number_of_replicas": 5, // Number of index replicas
    "number_of_shards": 1, // Number of index shards
    "opendistro.index_state_management.policy_id": "hot_warm_policy" // Index lifecycle policy name
    },
    "mappings": {
    "properties": {
    "name": {
    "type": "text"
    }
    }
    }
    }
  4. Запишите данные в индекс.

    Например, создайте индекс с именем data-2022-06-06 и записывайте данные в него пакетами.

    POST data-2022-06-06/_bulk
    {"index":{}}
    {"name":"name1"}
    {"index":{}}
    {"name":"name2"}
    {"index":{}}
    {"name":"name3"}
    {"index":{}}
    {"name":"name4"}
    {"index":{}}
    {"name":"name5"}
    {"index":{}}
    {"name":"name6"}

    Индекс автоматически будет использовать шаблон индекса template_hot_warm и наследовать политику жизненного цикла hot_warm_policy через шаблон.

  5. Запросите данные и проверьте, применяется ли политика ISM автоматически.
    1. Через три дня после создания индекса запросите список замороженных индексов и проверьте, были ли индексы, созданные три дня назад, заморожены.
      GET _cat/freeze_indices?s=i&v

      Если возвращённый результат содержит data-2022-06-06, индекс был выгружен в OBS.

      health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
      green open data-2022-06-06 x8ab5NX6T3Ox_xoGUanogQ 1 1 6 0 7.6kb 3.8kb
    2. Через семь дней после создания индекса запросите список индексов и проверьте, были ли индексы, созданные семь дней назад, удалены.
      GET /_cat/indices?expand_wildcards=open,closed

      Если возвращённый результат не содержит data-2022-06-06, индекс был удалён.