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

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

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

Поскольку данные временных рядов постоянно записываются в OpenSearch и размер индекса продолжает расти, вы можете настроить управление жизненным циклом индекса (ISM) для периодического переключения данных в новые индексы и удаления старых индексов.

В этом примере для кластера OpenSearch создается политика жизненного цикла. Согласно этой политике, когда размер индекса достигает 1 TB или индексу исполняется один день, будет автоматически создан новый индекс; через семь дней после создания индекса дублирование данных будет отключено; через 30 дней после создания индекса индекс будет удалён.

Предположим, что индекс генерирует примерно 2,4 TB данных каждый день. Алиас индекса — log-alias. На следующем рисунке показан формат данных в кластере. При чтении он указывает на все индексы, имя которых начинается с test. При записи он указывает на последний индекс.

Рисунок 1 формат log-alias


Note

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

Требования

Целевой кластер OpenSearch доступен.

Автоматизация Index Rollover через управление жизненным циклом индекса

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

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

  2. Создать политику жизненного цикла rollover с именем rollover_workflow.

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

    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. Создать шаблон индекса template_test.

    Описание шаблона: Все новые индексы, начинающиеся с test автоматически связываются с политикой жизненного цикла rollover rollover_workflow. Псевдоним log_alias используется во время rollover.

    PUT _template/template_test
    {
    "index_patterns": "test*",
    "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1,
    "index.opendistro.index_state_management.rollover_alias": "log_alias"
    },
    "mappings": {
    "properties": {
    "name": {
    "type": "text"
    }
    }
    }
    }
    Таблица 1 Описание параметра

    Параметр

    Описание

    number_of_shards

    Количество шардов индекса

    number_of_replicas

    Количество реплик шардов индекса

    index.opendistro.index_state_management.rollover_alias

    Псевдоним индекса для rollover

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

    GET _template/template_test
  4. Создайте индекс, указав алиасы, и установить is_write_index на true. Шаблон индекса template_test автоматически используется для индекса и связан с политикой жизненного цикла rollover_workflow основано на конфигурации шаблона индекса. Таким образом, когда размер индекса достигает 1 TB или индекс создаётся более одного дня, rollover автоматически запускается. После создания индекса в течение семи дней копирование данных отключается. После создания индекса в течение 30 дней индекс удаляется.

    Следующий индекс — это URL‑код <test-{now/d}-000001>. По умолчанию имя индекса содержит дату создания. Например, если индекс создан 2022-06-02, имя индекса test-2022.06.02-000001.

    PUT %3Ctest-%7Bnow%2Fd%7D-000001%3E
    {
    "aliases": {
    "log_alias": {
    "is_write_index": true
    }
    }
    }

  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

      В приведенной выше информации, test-<Date>-000001 это индекс, созданный в 4, и test-<Date>-000002 это индекс, созданный при ролловере.

    • Чтобы выполнить запрос к индексу, связанному с алиасом 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: Как пропустить ролловер для индекса?

Сценарии

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

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

Процедура

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

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

  2. После пропуска перекатки индекса выполните следующую команду для повторного запуска задачи ISM:
    POST _plugins/_ism/retry/index_name

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

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