Elastic Search

Ch06. 고급 검색 - 스냅숏을 이용한 백업과 복구

webmaster 2025. 9. 24. 16:32
728x90

클러스터와 인덱스의 데이터가 커질수록 백업이 필요하다. 이러한 문제를 해결하기 위해 엘라스틱서치에서는 _snapshot API를 제공한다.

스냅숏 기능을 이용해 개별 인덱스를 백업할 수도 있고, 클러스터 전체를 스냅숏으로 만드는 것도 가능하다.

 

스냅숏 만들기

1. elasticsearch.yml에 스냅숏 사용지 지정

path repo: [ */home/snapshot/elastic/backup* ]

2. 레포지토리 생성하기

PUT _snapshot/movie_data_backup
{
  "type": "fs",
  "settings": {
    "location": "/home/snapshot/elastic/backup",
    "compress": true
  }
}
  • 레포지토리는 스냅숏들을 저장하는 논리적인 공간으로, 물리적으로 설정된 디렉터리 내부에만 생성할 수 있다.
  • 레포지토리를 생성할 때 다양한 설정값을 지정할 수 있으며, 이를 통해 생성되는 파일을 다수의 작은 파일로 나누어 저장할 수도 있고, 스냅숏으로 생성하거나 복원하는 속도를 조정할 수도 있다.
  • 스냅숏을 생성하거나 복원하는 작업은 시스템 리소스를 많이 사용하기에 제공되는 옵션을 적절히 활용해야 한다.
location 스냅숏의 저장 경로를 설정한다.
compress 스냅숏 생성 시 압축을 진행한다. 메타 데이터만 압축 대상이다(데이터는 X)
chunk_size 생성되는 파일을 특정 크기로 나눠서 생성한다.(기본적으로 스냅숏은 1개 파일로 생성)
max_restore_bytes_per_sec 스냅숏 복원 시 속도를 설정한다(기본적으로 초당 40MB)
max_snapshot_bytes_per_sec 스냅숏 생성 시 속도를 설정한다(기본적으로 초당 40MB)
readonly 레포지토리를 읽기 전용으로 생성한다

 

3. 스냅숏 생성

Request

PUT _snapshot/movie_data_backup/movie_snapshot_part1?wait_for_completion=true
{
  "indices": "movie_search_1544054400",
  "ignore_unavailable": true,
  "include_global_state": false
}

Response

{
  "snapshot": {
    "snapshot": "movie_snapshot_part1",
    "uuid": "6lu_iEKTRw-wlap4nzzCiA",
    "version_id": 6050199,
    "version": "6.5.1",
    "indices": [
      "movie_search_mapping",
      "movie_routing",
      "movie_search"
    ],
    "include_global_state": true,
    "state": "SUCCESS",
    "start_time": "2018-12-06T07:54:53.1062",
    "start_time_in_millis": 1544082893106,
    "end_time": "2018-12-06T07:54:53.4947",
    "end_time_in_millis": 1544082893494,
    "duration_in_millis": 388,
    "failures": [],
    "shards": {
      "total": 121,
      "failed": 0,
      "successful": 121
    }
  }
}
  • 스냅숏 대상이 되는 인덱스는 더 이상 변경이 없는 인덱스야만 한다.
    • 변경이 일어나는 도중 스냅숏이 생성되면 문제가 발생할 가능성이 있음
  • wait_for_completion 옵션을 사용하면 스냅숏 생성이 완료될 때까지 기다릴 수 있다.
  • 스냅숏 이름은 유일해야 하며, 이미 존재하면 오류가 발생한다

4. 스냅숏 정보 확인

GET _snapshot/movie_data_backup/_all
  • 레포지토리 명을 통해 지금까지 생성된 스냅숏에 대한 정보를 확인할 수 있다.

5. 스냅숏을 통한 복구

POST _snapshot/movie_data_backup/movie_snapshot_part1/_restore
  • movie_snapshot_part1이라는 이름으로 백업된 movie_search_1544054400 인덱스가 복구된다.
  • 이미 인덱스가 있다면 복구는 실패하고 오류가 발생한다.
    • 인덱스가 정상 복구되려면 클러스터 내부에 동일한 인덱스가 존재해서는 안된다.

6. 스냅숏 제거

DELETE _snapshot/movie_data_backup/movie_snapshot_part1
  • Delete 메서드를 통해 제거 가능
728x90