Автор оригинала: Monika Maheshwari.
Миграция данных сервера из Elasticsearch 1.x до 5.x версия с использованием API reindex в Nodejs. Это делается с нулевым временем простоя и обрабатывает миграцию данных Live-Server.
Если вы запустите кластер 1.x и хотите перенести напрямую до 5.x без предварительного миграции на 2.x, вы можете сделать это, используя Reindex – от удаленной Отказ
Создать новый индекс:
Создайте новый индекс в кластере 5.x с обновленными сопоставлениями. Прочитайте все изменения API в новой версии Elasticsearch, которая должна быть изменена.
Установите Refresh_Interval на -1 и установите значение_of_reploxas в 0 для более быстрой оправдания.
client.indices.create({ index: "myindex_v2", body:{ settings:{ }, mappings:{ } } },function(err,res) { if(err) { console.log(err); } else { console.log("create",res); } });
Овращение:
Используйте Reindex-от пульта дистанционного управления, чтобы потянуть документы из индекса 1.x в новый индекс 5.x.
Вы можете повторно обратиться без использования запроса диапазона. Это будет тянуть все документы во время этого снижения. Это не будет включать документы, созданные или обновляемые во время овращения.
— Whitelist для удаленной индексации — Добавить в elasticsearch.yml
reindex.remote.whitelist: hostname:9200
Возьмите текущий момент времени T1 и запрос для всех записей в данном пространстве имен, который был изменен до этого временного метка и отправить их для оправдания. Timestamp может быть полевым, он должен показать время, когда документ последний раз обновлен.
client.reindex({ body:{ source: { remote: { host: "http://hostname:9200" }, index: "myindex_v1", query: { range : { timestamp : { lte : T1 } } } }, dest: { index: "myindex_v2" } } },function(err,res) { if(err) { console.log(err); } else { console.log("reindex",res); } });
Как только они все оно оправдают, вы принимаете новый временную метку T2 и Reindex любую запись, которая была изменена в период T1-T2. Вы можете повторить это, пока нет никаких изменений (или сделать максимальное количество итераций).
client.reindex({ body:{ source: { remote: { host: "http://hostname:9200" }, index: "myindex_v1", query: { range : { timestamp : { gte : T1, lte : T2 } } } }, dest: { index: "myindex_v2" } } },function(err,res) { if(err) { console.log(err); } else { console.log("reindex",res); } });
Обновите псевдоним:
Изменить MyIindex Псевдоним, чтобы указать на новый индекс, на одном атомном шаге.
client.indices.updateAliases({ body:{ actions : [ { add : { index : "myindex_v2", alias : "myindex" } } ] } },function(err,res) { if(err) { console.log(err); } else { console.log("alias updated",res); } });
Удалите псевдоним из старого индекса, который подключается к удаленному серверу.
client.indices.updateAliases({ body:{ actions : [ { remove : { index : "myindex_v2", alias : "myindex" } } ] } },function(err,res) { if(err) { console.log(err); } else { console.log("alias removed",res); } });
Клиент здесь должен быть имя хоста: 9200
Вы можете нам код на GitHub по адресу: https://github.com/monikamaheshwari/upgradeelasticsearch