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

Автоматизация переключения индексов в кластере Elasticsearch через Управление жизненным циклом индекса

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

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

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

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

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


Note

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

Требования

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

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

Notice

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

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

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

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

    Описание политики: Когда размер индекса достигает 1 TB или индекс был создан более чем один день, выполняется rollover индекса. Когда индекс создан семь дней, копирование данных отключается. Когда индекс создан 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. Создайте шаблон индекса template_test.

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

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

    Параметр

    Описание

    number_of_shards

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

    number_of_replicas

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

    opendistro.index_state_management.policy_id

    Имя политики жизненного цикла

    index.opendistro.index_state_management.rollover_alias

    Псевдоним индекса для перестройки

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

    GET _template/template_test
  4. Создайте индекс, укажите алиасы, и установите is_write_index на true. Шаблон индекса template_test автоматически используется для индекса и связан с политикой жизненного цикла rollover_workflow на основе конфигурации шаблона индекса. Таким образом, когда размер индекса достигает 1 TB или индекс создаётся более одного дня, переключение автоматически начинается. После создания индекса в течение семи дней копирование данных отключается. После создания индекса в течение 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 это индекс, созданный через 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: How Do I Skip Rollover for an Index?

Сценарии

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

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

Ограничения

Чтобы пропустить перелистывание индекса, версия кластера 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": []
    }