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

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

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

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

  • 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 часам после создания индекса, а не к календарному дню.

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

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

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

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

    Например, создайте политику с именем "rollover workflow": Когда размер индекса достигает 1 TB или возраст индекса достигает одного дня, он переключается автоматически. Когда возраст индекса достигает семи дней, реплики отключаются. Когда достигает 30 дней, индекс удаляется. Кроме того, все вновь созданные индексы, имя которых начинается с test, будут автоматически связаны с этой политикой.

    PUT _plugins/_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": {}
    }
    ]
    }
    ],
    "ism_template": {
    "index_patterns": [
    "test*"
    ],
    "priority": 100
    }
    }
    }

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

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

    Например, создайте шаблон индекса с именем template_test и используйте 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
    "index.opendistro.index_state_management.rollover_alias": "log_alias" // Index lifecycle policy name
    },
    "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 индекса может привести к потере данных. Пожалуйста, будьте осторожны.

Процедура

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

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

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

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

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