elasticsearch 백업 및 복구 정책
snapshot 의 path를 외부 서버로 둘수 있는가?
- type이 fs, s3, azure, hdfs 정도다.
- curator에 snapshot 기능이 있다.
- snapshot & restore가 빠르지만, aliasing은 복구를 못한다고함.
- 기존 존재하는 인덱스에 복구시에는 같은 수에 shards를 가지고 있는지와 반드시 해당 인덱스를 closed 하고 난 다음 진행해야 함.
local에 snapshot을 하고, 해당 결과물 파일로 백업(외부서버) 및 복구가 가능한가?
- 가능함. path.repo에 등록한 디렉토리 통으로 tar 압축.
dump file(json 파일)을 백업하고 복구(_bulk API 사용) 가능한가?
- mysqldump 와 비슷한듯.
- dump 타입에 따라 mapping(scheme), data 별도로 dump 가능.
- 복구 시 시간이 오래 걸림
결론
2번 방법으로 진행하고, 해당 디렉토리를 tar 압축하여 별도의 백업서버에 저장하는 방법이 좋을듯합니다.
상세 코드
백업
- 백업 repository 생성
1 | PUT /_snapshot/test_statistics_backup |
- snapshot 생성
1 | PUT /_snapshot/test_statistics_backup/test-2018.12.06?wait_for_completion=true |
기본적으로 비동기로 처리되기 때문에, wait_for_completion 파라미터를 주어서, snapshot 생성 종료여부를 확인한다.
- snapshot 삭제
1 | DELETE /_snapshot/test_statistics_backup/test-2018.12.06 |
- repository 삭제
1 | DELETE /_snapshot/test_statistics_backup |
snapshot이 있는 상태에서 repository를 삭제한다고 snapshot이 같이 삭제되지는 않는다.
동일 name으로 repository를 다시 생성하면, snapshot은 살아 있다.
- 특정 repository의 스냅샷 목록 확인
1 | GET /_cat/snapshots/test_statistics_backup?v |
복구
- 특정 snapshot 을 이용한 복구
1 | POST /_snapshot/test_statistics_backup/test-2018.12.06/_restore |
indices 파라미터를 주지 않으면 전체 복구.
- open 상태의 index 복구
1 | POST /test-*/_close |
참고
http://knight76.tistory.com/entry/Elasticsearch-%EB%B0%B1%EC%97%85%EA%B3%BC-%EB%B3%B5%EA%B5%AC
https://qbox.io/blog/elasticsearch-data-snapshots-restore-tutorial
http://jjeong.tistory.com/tag/elasticsearch?page=1(http://jjeong.tistory.com/tag/elasticsearch?page=1)
https://lahuman.github.io/elastic_dump
https://github.com/taskrabbit/elasticsearch-dump