elasticsearch-backup-and-restore

2018-12-06
old-posts

elasticsearch 백업 및 복구 정책

  1. snapshot 의 path를 외부 서버로 둘수 있는가?

    • type이 fs, s3, azure, hdfs 정도다.
    • curator에 snapshot 기능이 있다.
    • snapshot & restore가 빠르지만, aliasing은 복구를 못한다고함.
    • 기존 존재하는 인덱스에 복구시에는 같은 수에 shards를 가지고 있는지와 반드시 해당 인덱스를 closed 하고 난 다음 진행해야 함.
  2. local에 snapshot을 하고, 해당 결과물 파일로 백업(외부서버) 및 복구가 가능한가?

    • 가능함. path.repo에 등록한 디렉토리 통으로 tar 압축.
  3. dump file(json 파일)을 백업하고 복구(_bulk API 사용) 가능한가?

    • mysqldump 와 비슷한듯.
    • dump 타입에 따라 mapping(scheme), data 별도로 dump 가능.
    • 복구 시 시간이 오래 걸림

결론

2번 방법으로 진행하고, 해당 디렉토리를 tar 압축하여 별도의 백업서버에 저장하는 방법이 좋을듯합니다.

상세 코드

백업

  1. 백업 repository 생성
1
2
3
4
5
6
7
8
PUT /_snapshot/test_statistics_backup
{
"type": "fs",
"settings": {
"location": "/backup/elasticsearch",
"compress": true
}
}
  1. snapshot 생성
1
2
3
4
5
6
PUT /_snapshot/test_statistics_backup/test-2018.12.06?wait_for_completion=true
{
"indices": "test-*",
"ignore_unavailable": true,
"include_global_state": false
}

기본적으로 비동기로 처리되기 때문에, wait_for_completion 파라미터를 주어서, snapshot 생성 종료여부를 확인한다.

  1. snapshot 삭제
1
DELETE /_snapshot/test_statistics_backup/test-2018.12.06
  1. repository 삭제
1
DELETE /_snapshot/test_statistics_backup

snapshot이 있는 상태에서 repository를 삭제한다고 snapshot이 같이 삭제되지는 않는다.
동일 name으로 repository를 다시 생성하면, snapshot은 살아 있다.

  1. 특정 repository의 스냅샷 목록 확인
1
GET /_cat/snapshots/test_statistics_backup?v

복구

  1. 특정 snapshot 을 이용한 복구
1
2
3
4
5
6
POST /_snapshot/test_statistics_backup/test-2018.12.06/_restore
{
"indices": "test-*",
"ignore_unavailable": true,
"include\_global\_state": false
}

indices 파라미터를 주지 않으면 전체 복구.

  1. open 상태의 index 복구
1
2
3
4
5
6
7
8
9
10
POST /test-*/_close

POST /_snapshot/test_statistics_backup/test-2018.12.06/_restore
{
"indices": "test-*",
"ignore_unavailable": true,
"include\_global\_state": false
}

POST /test-*/_open

참고

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