TGViewer
Devops Bootcamp с Федосеевым Devops Bootcamp с Федосеевым @devopsupgrade · 5.33K subscribers
Post #1237 1.04K
Коллеги, приветствую👋

Сегодня поговорим о том, как быстро перенести индекс Elasticsearch между кластерами без S3.
Недавно при переезде на новый кластер Elasticsearch понадобилось перенести только несколько индексов. Казалось бы, задача простая: перенести документы — и готово. Но индекс в Elasticsearch - это не только документы. Есть ещё mapping, settings, aliases и другие метаданные.

Самый правильный вариант - Snapshot/Restore
Для полноценного переноса Elasticsearch предоставляет механизм Snapshot/Restore. Snapshot можно хранить во внешнем repository, например в S3, а затем восстановить на другом кластере.

Документация:
Snapshot and Restore
S3 repository
Это хороший вариант, когда инфраструктура уже готова. Но что делать, если доступ к S3 нужно ещё получить, а индексы нужны буквально «вчера»?

Reindex — быстрый перенос документов
В Elasticsearch есть API _reindex, который позволяет скопировать документы из одного индекса в другой. Он также поддерживает перенос из удалённого Elasticsearch-кластера.

Простейший вариант:

POST /_reindex
{
"source": {
"index": "old-index"
},
"dest": {
"index": "new-index"
}
}


Документация: Reindex API
Но здесь есть важный нюанс.
_reindex переносит документы, но не переносит mapping и settings исходного индекса.

Поэтому целевой индекс нужно подготовить до запуска reindex.
Сначала mapping, потом документы
Получить mapping исходного индекса можно так:
GET /old-index/_mapping


Документация: Get mapping
После этого создаём индекс на новом кластере с нужным mapping:

PUT /new-index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"age": {
"type": "integer"
}
}
}
}


Это важно, потому что если создать пустой индекс без нужного mapping, Elasticsearch может применить dynamic mapping при первой индексации документов. В результате типы полей могут отличаться от исходного индекса.
При создании индекса можно сразу задать settings, mappings и aliases: Create index API.

И не забываем про aliases
Ещё одна частая ошибка — перенести документы и забыть про aliases.

Например, приложение работает с:
users

а на самом деле это alias, указывающий на:
users-2026-08

Получить aliases можно через:
GET /old-index/_alias

После переноса их необходимо создать на новом индексе.

Например:
PUT /new-index/_alias/users

Или использовать _aliases, если нужно одновременно удалить alias со старого индекса и добавить его на новый:

POST /_aliases
{
"actions": [
{
"remove": {
"index": "old-index",
"alias": "users"
}
},
{
"add": {
"index": "new-index",
"alias": "users"
}
}
]
}


Это удобно при production-миграции: приложение продолжает обращаться к тому же alias, а мы просто переключаем его на новый индекс.

Документация: Aliases API
Можно автоматизировать
Если индексов много или не хочется писать всё вручную, можно использовать elasticsearch-dump.
Инструмент позволяет отдельно переносить data, mapping, alias, settings, analyzer и другие сущности.
elasticsearch-dump на GitHub

Например:

elasticdump \
--input=http://old-es:9200/my_index \
--output=http://new-es:9200/my_index \
--type=mapping

elasticdump \
--input=http://old-es:9200/my_index \
--output=http://new-es:9200/my_index \
--type=data


Это уже можно завернуть в обычный Bash-скрипт и автоматизировать миграцию.
www.elastic.co Snapshot and restore | Elastic Docs A snapshot is a backup of a running Elasticsearch cluster. You can use snapshots to: Regularly back up a cluster with no downtime, Recover data after...
  • 👍 7
  • 🔥 1
  • 👏 1
More from @devopsupgrade
  1. Sep 23, 2026Вчера стартовал курс «Профессия DevOps-инженер»🔥 Из чего состоит курс: Обучение проходит…
  2. Sep 22, 2026⚡️⚡️⚡️⚡️⚡️⚡️ Коллеги, приветствую👋 🔴Бывали ли у вас такое, открываешь вакансию - а там с…
  3. Sep 21, 2026Post #1247
  4. Sep 18, 2026Коллеги, приветствую 👋 Сегодня подводим итоги розыгрыша фирменного мерча: разыгрывались 3…
  5. Sep 8, 2026🎉 Розыгрыш завершен! 🏆 Победители: 1. @WolkStt 🔍 Проверить результаты
  6. Sep 7, 2026Коллеги, приветствую👋 Решил порадовать подписчиков своего канала и разыграть фирменный ме…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →