Elasticdump를 이용한 데이터 백업과 리스토어
elasticsearch의 데이터를 다른 곳으로 이관 하는 작업을 해야 한다.
이때 사용 가능한 프로그램이 elasticdump 이다.
elasticdump는 현재 3.3.1 버젼으로 Elasticsearch 5.x 버젼을 지원하고 있다.
지금 사용하는 elasticsearch 버젼이 2.x여서 해당 버젼을 지원하는 elsticdump 2.4.2를 설치 해야 한다.
설치
설치는 가이드에 나온 것과 같이 npm 을 설치 하고 elasticdump 모듈을 설치 해야 한다.
# npm은 설치 되어 있다고 가정 한다.
npm install elasticdump
# git 에서 코드 download
git clone https://github.com/taskrabbit/elasticsearch-dump.git
cd elasticsearch-dump
# v2.4.2 으로 변경
git checkout tags/v2.4.2
# 버전 확인
./bin/elasticdump --version
2.4.2
데이터 백업
백업되는 데이터 타입은 크게 3가지로 나누어 진다.
- analyzer
- mapping
- data
기본적으로 데이터를 넣기 위해서는 최소한의 데이터 맵핑이 있어야 한다.
elasticdump 는 Elasticsearch to Ealsticsearch 를 지원하며, File 로 저장 리스토어도 가능하다.
# Copy an index from production to staging with analyzer and mapping:
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=analyzer
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=mapping
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=data
# Backup index data to a file:
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=/data/my_index_mapping.json \
--type=mapping
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=/data/my_index.json \
--type=data
# Backup and index to a gzip using stdout:
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=$ \
| gzip > /data/my_index.json.gz
# Backup the results of a query to a file
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=query.json \
--searchBody '{"query":{"term":{"username": "admin"}}}'
# Copy a single shard data:
elasticdump \
--input=http://es.com:9200/api \
--output=http://es.com:9200/api2 \
--params='{"preference" : "_shards:0"}'
searchBody를 이용하면 원하는 목록 가져올 수 있다.
2017.12.07 테스트 결과 추가
원본데이터를 파일로 저장
1. 원본 데이터 매핑 저장
./elasticdump \
--input=http://10.10.10.202:9200 \
--input-index=elastic_data/elastic_data \
--output=elastic_data_mapping.json \
--type=mapping
2. 원본 데이터 백업
sample로 searchBody를 이용하여 1분 동안의 데이터만 가져오도록 함
./elasticdump \
--input=http://10.10.10.202:9200 \
--input-index=elastic_data/elastic_data \
--output=elastic_data.json \
--type=data \
--searchBody '{
"query":{
"range":{
"log_dttm":{
"gte":"2017-11-01T00:00:00",
"lte":"2017-11-01T00:00:59"
}
}
}
}'
파일로 저장된 데이터를 서버에 저장
1. 인덱스 추가 & 데이터 형식 저장
./elasticdump \
--input=elastic_data_mapping.json \
--output=http://10.10.10.180:9201/elastic_data \
--type=mapping
2. 데이터 import 처리
이미 등록된 데이터를 다시 등록 할 경우 _version 의 값이 +1 처리 된다.
./elasticdump \
--input=elastic_data.json \
--output=http://10.10.10.180:9201/elastic_data \
--type=data