2017-02-14 2 views
0

Я хочу резервное копирование данных elasticsearch в другом физическом месте. Я попытался поместить все узлы elasticsearch в один кластер вначале, но при запросе программы или обновлении elasticsearch большие данные будут передаваться в Интернете. Это вызовет много денег для сетевого трафика, и есть сетевая задержка.Как синхронизировать данные между кланами elasticsearch?

Есть ли простой способ синхронизации данных между двумя кластерами elasticsearch? так что я могу только синхронизировать измененные данные в Интернете.

PS: Я не так заботиться о задержке синхронизации данных, менее 1 мин приемлемо

ответ

2

В случае, если вы используете последнюю версию Elasticsearch (5.0 или 5.2+), вам нужно иметь или добавить date поле updatedAt или аналогичное название, а затем на кластере назначения на стороне запуска cron каждый 1 минуту, которая будет работать Reindex API запрос следующим образом:

POST _reindex 
{ 
    "source": { 
    "remote": { 
     "host": "http://sourcehost:9200", 
     "username": "user", 
     "password": "pass" 
    }, 
    "index": "source", 
    "query": { 
     "range": { 
     "updatedAt": { 
      "gte": "2015-01-01 00:00:00" 
     } 
    } 
    }, 
    "dest": { 
    "index": "dest" 
    } 
} 

Более подробную информацию о переиндексации API вы можете получить здесь - https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

В случае, если вы используете старый Elasticsearch (< 5.0), вы можете использовать инструмент elasticdump (https://github.com/taskrabbit/elasticsearch-dump) для передачи данных с использованием аналогичного подхода с полем updatedAt.