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

Автоматизация переключения индекса с помощью ISM

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

Рабочие нагрузки по обработке данных временных рядов, такие как аналитика журналов и мониторинг в реальном времени, часто сопровождаются быстрым ростом объёма данных со временем. Если данные продолжают записываться в один индекс, индекс может стать чрезмерно большим, что приводит к ухудшению производительности запросов и увеличению потребления хранилища из‑за устаревших данных. Традиционно управление этим ростом требовало пользовательских скриптов для разделения индексов, что было сложным и дорогим. Теперь, настроив политики управления состоянием индекса (ISM) для индексов в кластерах Elasticsearch, можно автоматизировать переключение индекса на основе размера или возраста индекса и автоматически удалять устаревшие индексы. Это помогает сбалансировать производительность запросов и затраты на хранение.

  • ISM: плагин, который автоматизирует управление жизненным циклом индекса.
  • Rollover: Когда размер или возраст индекса достигает предопределённого порога, автоматически создаётся новый индекс, и записи перенаправляются в новый индекс.
  • Alias: логическое имя индекса. При записи alias всегда указывает на текущий активный индекс; при запросах он указывает на текущий активный индекс и все исторические индексы.

Решение

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

  • Hot phase: Индексы обрабатывают записи с высокой конкуренцией. Когда размер индекса достигает 1 TB или его возраст достигает одного дня, автоматически создаётся новый индекс, и записи перенаправляются в новый индекс.
  • Warm phase: Через семь дней реплики индекса отключаются для экономии ресурсов.
  • Delete phase: Через 30 дней индекс автоматически удаляется для освобождения места в хранилище.

Предположим, что приложение генерирует около 2,4 TB журналов каждый день. Можно создать политику ISM для оптимизации хранения журналов и производительности запросов. В этом примере мы определяем alias индекса как log-alias. Figure 1 log-alias data organization показывает организацию данных в этом индексе. При запросах alias указывает на все индексы, имена которых начинаются с test. При записях alias указывает только на последний индекс.

Figure 1 log-alias data organization


Note

Один день в времени переключения означает 24 часа после создания индекса, а не календарный день.

Ограничения

Версия Elasticsearch должна быть 7.6.2 или новее.

Настройка ISM Policy

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

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

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

    Для примера, создайте политику с именем "rollover workflow": Когда размер индекса достигает 1 TB или возраст индекса достигает одного дня, он автоматически переключается. Когда возраст индекса достигает семи дней, реплики отключаются. Когда достигает 30 дней, индекс удаляется.

    PUT _opendistro/_ism/policies/rollover_workflow
    {
    "policy": {
    "description": "rollover test",
    "default_state": "hot",
    "states": [
    {
    "name": "hot",
    "actions": [
    {
    "rollover": {
    "min_size": "1tb",
    "min_index_age": "1d"
    }
    }
    ],
    "transitions": [
    {
    "state_name": "warm",
    "conditions": {
    "min_index_age": "7d"
    }
    }
    ]
    },
    {
    "name": "warm",
    "actions": [
    {
    "replica_count": {
    "number_of_replicas": 0
    }
    }
    ],
    "transitions": [
    {
    "state_name": "delete",
    "conditions": {
    "min_index_age": "30d"
    }
    }
    ]
    },
    {
    "name": "delete",
    "actions": [
    {
    "delete": {}
    }
    ]
    }
    ]
    }
    }

    После создания политики жизненного цикла выполните следующую команду для получения сведений о политике:

    GET _opendistro/_ism/policies/rollover_workflow
  3. Свяжите политику с шаблоном индекса, чтобы новые индексы, созданные с использованием этого шаблона, автоматически наследовали ISM policy и алиас.

    Для примера создайте шаблон индекса с именем template_test, чтобы вновь создаваемые индексы, имя которых начинается с test, автоматически связывались с ISM policy rollover_workflow и использовали log_alias для переключения индекса.

    PUT _template/template_test
    {
    "index_patterns": "test*",
    "settings": {
    "number_of_replicas": 1, // Number of index replicas
    "number_of_shards": 1, // Number of index shards
    "opendistro.index_state_management.policy_id": "rollover_workflow", // Index lifecycle policy name
    "index.opendistro.index_state_management.rollover_alias": "log_alias" // Which alias to roll over
    },
    "mappings": {
    "properties": {
    "name": {
    "type": "text"
    }
    }
    }
    }

    После создания шаблона индекса вы можете выполнить следующую команду для получения сведений о шаблоне:

    GET _template/template_test
  4. Создайте вручную первый индекс, который запустит процесс автоматического переключения.

    Для примера создайте первый индекс, задайте формат даты, укажите aliases и установите is_write_index в true. Индекс автоматически будет использовать шаблон индекса template_test и наследовать политику жизненного цикла rollover_workflow через шаблон.

    PUT %3Ctest-%7Bnow%2Fd%7D-000001%3E
    {
    "aliases": {
    "log_alias": {
    "is_write_index": true // Tells the customer to direct all write requests aiming at log_alias to this index.
    }
    }
    }

    The index above is the URL code of <test-{now/d}-000001>. By default, the index name contains the creation date. For example, if an index was created on 2022-06-02, the index name is test-2022.06.02-000001.

  5. Запись данных. Алиас log_alias используется при записи данных, а log_alias всегда указывает на последний индекс.
    POST log_alias/_bulk
    {"index":{}}
    {"name":"name1"}
    {"index":{}}
    {"name":"name2"}
    {"index":{}}
    {"name":"name3"}
    {"index":{}}
    {"name":"name4"}
    {"index":{}}
    {"name":"name5"}
    {"index":{}}
    {"name":"name6"}
  6. Запросите данные и проверьте, вступил ли rollover в силу.
    • Через один день после создания индексов проверьте индексы, начинающиеся с test.
      GET _cat/indices/test*?s=i

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

      green open test-<Date>-000001 r8ab5NX6T3Ox_hoGUanogQ 1 1 6 0 416b 208b
      green open test-<Date>-000002 sfwkVgy8RSSEw7W-xYjM2Q 1 1 0 0 209b 209b

      In the preceding information, test-<Date>-000001 is the index created in 4, and test-<Date>-000002 is the index generated through rollover.

    • Чтобы запросить индекс, связанный с алиасом log_alias, выполните следующую команду:
      GET _cat/aliases/log_alias?v

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

      alias index filter routing.index routing.search is_write_index
      log_alias test-<Date>-000001 - - - false
      log_alias test-<Date>-000002 - - - true

FAQ: Как пропустить rollover для индекса?

Сценарии

  • Выполняется ручной rollover: была настроена основанная на времени политика ISM для автоматизации rollover индекса. Однако до того, как критерии rollover были выполнены, был выполнен ручной rollover. Когда наступило время автоматического rollover, настроенное ISM, была попытка автоматического rollover, но она завершилась неудачей, поскольку индекс уже был переключён вручную. В результате задача ISM остановилась. Чтобы решить эту проблему, необходимо пропустить rollover индекса, а затем повторно запустить задачу ISM для возобновления автоматического rollover.
  • Для индекса, который уже был автоматически переключён, выполняется операция удаления или добавления политики: после изменения политики rollover (через операцию remove policy или add policy) задача ISM перезапускается с начала. Когда начинается rollover, задача завершается с ошибкой. Чтобы решить эту проблему, также необходимо пропустить rollover индекса и затем повторно запустить задачу ISM для возобновления автоматического rollover.
Warning

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

Ограничения

Чтобы пропустить rollover индекса, версия кластера Elasticsearch должна быть 7.6.2 или 7.10.2, а версия образа кластера не должна быть старее 7.x.2_25.1.0_x.x.x.

Процедура

  1. Если задача ISM останавливается из‑за сбоя переключения индекса, выполните следующую команду, чтобы пропустить переключение индекса:
    PUT {index_name}/_settings
    {
    "index.plugins.index_state_management.rollover_skip": true
    }

    Если true возвращено, конфигурация выполнена успешно.

  2. После пропуска переключения индекса выполните следующую команду, чтобы повторить задачу ISM:
    POST _opendistro/_ism/retry/{index_name}

    Если возвращена следующая информация, повтор выполнен успешно:

    {
    "updated_indices": 1,
    "failures": false,
    "failed_indices": []
    }