Индексы смешивают фильтры распределения индексов с уровнями данных ролей узла для перемещения по уровням данных
Elasticsearch стандартизировал реализацию архитектур "горячие-теплые-холодные" для уровней данных в версии 7.10. Некоторые индексы и развертывания могут не завершить переход на уровни данных и смешивают новый способ реализации архитектуры "горячие-теплые-холодные" со устаревшими атрибутами узлов.
Это может привести к неназначенным фрагментам или фрагментам, не переходящим на желаемый уровень.
Для исправления выполните следующие шаги:
Для назначения фрагментов необходимо вызвать API маршрутизации миграции на уровни данных, который разрешит конфликтующие конфигурации маршрутизации в пользу использования стандартизированных уровней данных. Это также защитит систему в будущем, выполнив миграцию шаблонов индексов и правил ILM при необходимости.
Используйте Kibana
- Войдите в консоль Elastic Cloud.
-
На панели Услуга Elasticsearch нажмите имя вашей развертывания.
Если имя вашей развертывания отключено, ваши экземпляры Kibana могут быть неисправны. В этом случае обратитесь за помощью к службе поддержки Elastic. Если ваша развертывание не включает Kibana, вам нужно будет включить его.
-
Откройте боковое меню развертывания (расположено под логотипом Elastic в левом верхнем углу) и перейдите к Dev Tools > Console.
-
Сначала остановите управление жизненным циклом индексов.
resp = client.ilm.stop() print(resp)
response = client.ilm.stop puts response
const response = await client.ilm.stop(); console.log(response);
POST /_ilm/stop
Ответ будет выглядеть так:
{ "acknowledged": true } -
Подождите, пока управление жизненным циклом индексов остановится. Проверяйте статус, пока он не вернёт
STOPPEDследующим образом:resp = client.ilm.get_status() print(resp)
response = client.ilm.get_status puts response
const response = await client.ilm.getStatus(); console.log(response);
GET /_ilm/status
Когда управление жизненным циклом индексов успешно остановится, ответ будет выглядеть так:
{ "operation_mode": "STOPPED" } -
resp = client.ilm.migrate_to_data_tiers() print(resp)
response = client.ilm.migrate_to_data_tiers puts response
const response = await client.ilm.migrateToDataTiers(); console.log(response);
POST /_ilm/migrate_to_data_tiers
Ответ будет выглядеть так:
{ "dry_run": false, "migrated_ilm_policies":["policy_with_allocate_action"], "migrated_indices":["warm-index-to-migrate-000001"], "migrated_legacy_templates":["a-legacy-template"], "migrated_composable_templates":["a-composable-template"], "migrated_component_templates":["a-component-template"] }Обновленные правила ILM.
Индексы, которые были перенесены на маршрутизацию предпочтительного уровня.
Устаревшие шаблоны индексов, которые были обновлены, чтобы не содержать пользовательских настроек маршрутизации для предоставленного атрибута данных.
Шаблоны составных индексов, которые были обновлены, чтобы не содержать пользовательских настроек маршрутизации для предоставленного атрибута данных.
Обновленные шаблоны компонентов, чтобы не содержать пользовательских настроек маршрутизации для предоставленного атрибута данных.
-
Запустить управление жизненным циклом индексов
resp = client.ilm.start() print(resp)
response = client.ilm.start puts response
const response = await client.ilm.start(); console.log(response);
POST /_ilm/start
Ответ будет выглядеть так:
{ "acknowledged": true }
Для назначения фрагментов необходимо убедиться, что развертывание использует роли узлов уровней данных, а затем вызвать API маршрутизации миграции на уровни данных, который разрешит конфликтующие конфигурации маршрутизации в пользу использования стандартизированных уровней данных. Это также защитит систему в будущем, выполнив миграцию шаблонов индексов и правил ILM при необходимости.
-
В случае, если ваша развертывание еще не использует уровни данных, назначьте узлы данных соответствующему уровню данных. Настройте соответствующие роли для каждого узла данных, чтобы назначить его одному или нескольким уровням данных:
data_hot,data_content,data_warm,data_coldилиdata_frozen. Например, следующая настройка назначает узел только для данных на уровнях «горячие» и «контент».node.roles [ data_hot, data_content ]
-
Остановить управление жизненным циклом индексов.
resp = client.ilm.stop() print(resp)
response = client.ilm.stop puts response
const response = await client.ilm.stop(); console.log(response);
POST /_ilm/stop
Ответ будет выглядеть так:
{ "acknowledged": true } -
Подождите, пока управление жизненным циклом индексов остановится. Проверяйте статус, пока он не вернёт
STOPPEDследующим образом:resp = client.ilm.get_status() print(resp)
response = client.ilm.get_status puts response
const response = await client.ilm.getStatus(); console.log(response);
GET /_ilm/status
Когда управление жизненным циклом индексов успешно остановится, ответ будет выглядеть так:
{ "operation_mode": "STOPPED" } -
resp = client.ilm.migrate_to_data_tiers() print(resp)
response = client.ilm.migrate_to_data_tiers puts response
const response = await client.ilm.migrateToDataTiers(); console.log(response);
POST /_ilm/migrate_to_data_tiers
Ответ будет выглядеть так:
{ "dry_run": false, "migrated_ilm_policies":["policy_with_allocate_action"], "migrated_indices":["warm-index-to-migrate-000001"], "migrated_legacy_templates":["a-legacy-template"], "migrated_composable_templates":["a-composable-template"], "migrated_component_templates":["a-component-template"] }Обновленные правила ILM.
Индексы, которые были перенесены на маршрутизацию предпочтительного уровня.
Устаревшие шаблоны индексов, которые были обновлены, чтобы не содержать пользовательских настроек маршрутизации для предоставленного атрибута данных.
Шаблоны составных индексов, которые были обновлены, чтобы не содержать пользовательских настроек маршрутизации для предоставленного атрибута данных.
Обновленные шаблоны компонентов, чтобы не содержать пользовательских настроек маршрутизации для предоставленного атрибута данных.
-
Запустить управление жизненным циклом индексов
resp = client.ilm.start() print(resp)
response = client.ilm.start puts response
const response = await client.ilm.start(); console.log(response);
POST /_ilm/start
Ответ будет выглядеть так:
{ "acknowledged": true }
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/troubleshoot-migrate-to-tiers.html