Elasticsearch Snapshot으로 백업 및 복원

Created:

엘라스틱서치의 스냅샷을 이용해서 백업 및 복원을 진행해 보고자 한다.
개략적인 순서는 아래와 같다.

  • 스냅샷 레파지토리를 저장할 경로 생성
  • 레파지토리 생성
  • 레파지토리에 스냅샷 생성
  • 대상 서버에 스냅샷 복원

스냅샷 레파지토리를 저장할 경로 지정

먼저 스냅샷 파일을 물리적으로 저장할 경로를 설정해 줘야한다.
elasticsearch.yml 파일내에 적당하게 경로를 지정해 준다.

cluster.name: "docker-cluster"
network.host: 0.0.0.0
path.repo: ["/usr/share/elasticsearch/backup"]

여기서 추가한 코드는 path.repo: ["/usr/share/elasticsearch/backup"] 이다.
경로를 설정한뒤에 엘라스틱서치를 재시작 해줘야 하고, 지정한 디렉토리의 접근 권한도 확인해야 한다.

스냅샷 레파지토리 생성

키바나에서 레파지토리를 생성을 진행 하였다.

PUT /_snapshot/backup
{
  "type": "fs",
  "settings": {
    "compress": true,
    "location": "/usr/share/elasticsearch/backup"
  }
}

스냅샷이름은 backup으로 하였고 저장될 디렉토리는 location에 지정해 주었다.


생성된 레파지토리 확인

GET _snapshot

스냅샷 생성

모든 인덱스를 대상으로 스냅샷을 만들었다.
특정 인덱스만 지정하고자 하면 "indices": ${인덱스명}을 추가해준다.

PUT /_snapshot/backup/backup_20191210?wait_for_completion=true
{
  "ignore_unavailable": true,
  "include_global_state": true
}

생성된 스냅샷 확인

GET /_snapshot/backup/backup_20191210

위 스냅샷 레파지토리 저장 경로의 파일들을 복원하고자 하는 서버로 옮겨줘야 한다.
여기서는 /usr/share/elasticsearch/backup이 경로의 파일을 압축하여 로컬에 저장해두었다.

스냅샷 복원

복원할 서버도 위와 같이 레파지토리를 저장할 경로 지정 및 es재시작, 레파지토리 생성까지 진행한뒤에 위에서 저장해놓은 파일을 복원할 서버의 동일한 경로에 옮겨줬다.

잘 옮겨졌는지 확인

GET /_snapshot/backup/backup_20191210

복원할 서버에 동일한 인덱스가 이미 존재한다면 오류가 발생하므로 복원하기전에 대상 서버의 인덱스를 한번 체크 해줬다.

복원을 진행

POST /_snapshot/backup/backup_20191210/_restore

Comments