개요

ES에서 색인을 스냅샷 형태로 저장, 다른 클러스터에서 복원하는 방법을 정리하여 포스팅한다. 스냅샷을 추출할 클러스터를 원본 클러스터, 스냅샷 복원을 통해 인덱스를 저장할 클러스터를 사본 클러스터로 표현하겠다.

원본 클러스터 TODO

원본 클러스터에서 할 일은 스냅샷용 Repository 생성 및 Repository로 스냅샷을 저장하는 것이다.

elasticsearch.yml 수정

스냅샷용 Repository를 생성하기 위해 elasticsearch.yml에서 아래와 같이 경로를 지정하여 Repository가 저장될 물리 경로를 지정한다.

path.repo: ["/data12/backup"]

ES 재시작

위의 환경설정 파일 변경 후 ES를 재시작 한다.

$ ./bin/elasticsearch

Repository 추가

Repository를 아래와 같이 생성한다.

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "compress": true,
    "location": "/data12/backup"
  }
}

Repository 보기

Repository 생성후 정상 생성되었는지 확인 해 본다.

GET /_snapshot/my_backup

인덱스 보기

이제 스냅샷으로 만들 인덱스를 아래와 같이 조회하여 확인해 본다. 목적은 인덱스의 용량을 가늠해 (혹시나 운영중인 클러스터 라면) 스냅샷 생성으로 인한 장애 발생 가능성을 검토하기 위함이다.

GET _cat/indices

스냅샷 만들기

아래와 같이 원하는 Repository로 스냅샷을 만든다.

PUT /_snapshot/my_backup/manysong_20170206?wait_for_completion=true
{
  "indices": "manysong_1_t",
  "ignore_unavailable": true,
  "include_global_state": true
}

스냅샷 파일로 압축하기

스냅샷이 다 만들어지면 Repository 물리경로를 압축하여 사본 클러스터로 스냅샷을 옮긴다.

$ tar czvf snapshot.tar.gz 스냅샷경로

사본 클러스터 TODO

사본 클러스터에서는 Repository 생성후 옮겨온 스냅샷을 복사하여 스냅샷을 복원한다.

다른 클러스의 elasticsearch.yml 수정

위의 원본 클러스터에서 한것 처럼 elasticsearch.yml를 수정한다.

path.repo: ["/data12/backup"]

ES 재기동

마찬가지로 ES를 재기동 한다.

$ ./bin/elasticsearch

다른 클러스터에서 Repository 추가

원본 클러스터 스냅샷을 복사하기 전 Repository를 생성해 준다.

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "compress": true,
    "location": "/data12/backup"
  }
}

스냅샷 파일 붙여넣기

Repository를 생성 후 스냅샷 내용을 옮겨준다.

$ tar xzvf snapshot.tar.gz
$ # 다른 클러스터 repository 경로로 데이터 옮기기

스냅샷 확인해보기

스냅샷이 존재하는지 확인해 보면 존재하는 것을 알 수 있다.

GET /_snapshot/my_backup/manysong_20170206/_status

스냅샷 으로 복원

아래의 명령어로 스냅샷을 복원하면 된다.

POST /_snapshot/my_backup/manysong_20170206/_restore
{
  "indices": "manysong_1_t",
  "index_settings": {
    "index.number_of_replicas": 0
  },
  "ignore_index_settings": [
    "index.refresh_interval"
  ]
}

Reference