Иногда возникают ситуации когда необходимо скопировать один или несколько индексов между кластерами, к примеру для тестирования. В Elasticsearchимеется встроенный механизм, позволяющую скопировать данные между кластерами.
Для создании копии индекса, есть несколько вариантов
- Использовать резервную копию. Было бы слишком тяжело загружать всю резервную копию.
- Создать новый снимок.
- Экспортировать индекс в JSON и переиндексировать его.
- Использовать API reindex с удаленным источником (production)
Для переноса копии, первым делом необходимо разрешить в elasticsearch копировать индексы с сервера, для этого в файле
1 | nano /etc/elasticsearch/elasticsearch.yml |
Добавляем строку
1 | reindex.remote.whitelist: "<remoute_ip>:9200" |
<remoute_ip> - IP адрес ноды, откуда будем копировать.
После чего, потребуется перезапуск Elasticsearch.
1 | systemctl restart elasticsearch |
После запуска, копируем индексы следующим образом
1 2 3 4 5 6 7 8 9 10 | curl -H 'Content-Type: application/json' -XPOST 127.0.0.1:9200/_reindex?pretty -d' { "source": { "remote": {"host": "http://<remoute_ip>:9200"}, "index": "<index_name>" }, "dest": { "index": "<new_index_name>" } }' |
Где
- <remoute_ip> - IP адрес ноды, откуда копируем данные
- <index_name> - имя индекса для копирования
- <new_index_name> - имя индекса после копирования