뒤로가기

Elastic

엘라스틱서치 스냅샷의 5가지 특징

반윤성 2022.06.03.

Elasticsearch Snapshot ?

중요한 자료의 소실을 막기 위해서 백업 파일을 만드는 것은 중요합니다. 또한, 백업 파일들을 항상 최신(혹은 최신에 가깝게)으로 유지하는 것은 언제 일어날지 모르는 상황에 대비하여 반드시 필요한 작업이 될 것 입니다.

Elasticsearch에서는 인덱스 백업을 위해 스냅샷 기능을 제공하고 있습니다. 이것을 보다 잘 활용하기 위해서 스냅샷 기능의 특징을 파악하는 것이 중요하다고 생각됩니다.

엘라스틱서치 스냅샷의 특징들

1. 스냅샷은 증분(incremental)이다.

처음 스냅샷을 다룰 때 스냅샷을 생성하는 방식이 기존 내용을 삭제하고 현재 내용의 인덱스를 기준으로 다시 생성된다고 생각했습니다. 따라서 3시간을 들여 스냅샷을 생성하면 다음 생성 시에도 마찬가지로 3시간이 소요되는 방식을 생각했습니다.

하지만 변경 사항이 없는 인덱스에 대해 즉시 스냅샷이 생성되었습니다. 이를 통해 엘라스틱서치에서 제공하는 스냅샷이 증분방식으로 되어 있을 것이라고 유추하게 되었습니다. 공식 문서를 찾아보니 스냅샷은 기본적으로 증분방식이기 때문에 변경 사항에 대해서만 적용이 되는 로직을 가지고 있었습니다.

2. 다른 ES 클러스터에서 만들어낸 스냅샷으로도 복원 가능하다.

엘라스틱서치 스냅샷은 기본적으로 인덱스를 기반으로 저장하고 복원합니다. 따라서 만약 같은 repo.path 경로에 스냅샷이 위치해있다면 바로 복원해서 사용할 수 있습니다. 이를 활용하여 다른 ES 클러스터에 있는 스냅샷으로 현재 ES 클러스터에 인덱스를 만들 수 있습니다.

/images/2022-06-03-Elasticsearch-Snapshot/image1.jpg

3. 최적의 속도는 몇일까?

엘라스틱서치 스냅샷용 리포지토리를 생성할 때 Max snapshot bytes per second, Max restore bytes per second 값을 설정합니다. 해당 값은 스냅샷 생성 및 복원시 작업하는 속도를 의미합니다. 설정하지 않았을 때 기본 값은 40mb/s로 제한됩니다. 최적의 속도를 알아내기 위해 gb, mb 단위를 선택할 수 있습니다. 여기서 시스템 스펙, 네트워크 사양에 따라 최적의 속도는 변화할 수 있고, 1GB/s를 선택했다고해서 그 속도가 보장이 되진 않습니다. 오히려 LIMIT의 개념에 가깝다고 보는 것이 적합합니다.

4. 스냅샷 자동화하기

수동으로 스냅샷을 생성할 수 있지만 지속적으로 최신 상태의 snapshot을 유지하기 위해서는 SLM(Snapshot lifecycle manage)를 설정하는 것이 좋습니다. 지정한 스케줄마다 스냅샷을 생성하고, 스냅샷은 항상 인덱스의 최신 상태를 가지고 있습니다.

policy에서는 설정 정보, 보유 기간, 보유 갯수, 인덱스 등을 설정할 수 있으며 스케줄 실행 시 설정된 정책 값에 맞게 스냅샷을 생성합니다. 주의할 점은 보유 갯수를 1개 이하로 설정할 수 없습니다. 스냅샷은 최소 1개 ~ 설정값 까지 보유할 수 있으며 제거시 가장 오래된 보유 분부터 제거됩니다.

다만, 1개로 유지할 때 제거를 하고 생성을 하는 것이 아니라는 점을 생각해야 합니다. 생성 후에 제거하기 때문에 기존 백업 인덱스에 증분으로 스냅샷이 만들어지게 됩니다.

5. 스냅샷이 없다면, 스냅샷이 중간에 빠진다면 어떻게 될까?

우선 스냅샷을 도입하기 전에 다양한 예외 상황을 상정해볼 필요가 있습니다. 예를 들어 연속된 스냅샷을 생성했을때 중간의 스냅샷이 없어진다면 어떻게 될까요? 결론부터 말하자면 ‘영향이 없다’가 정답입니다. 스냅샷 인덱스는 항상 최신으로 유지되기 때문에 몇 개의 스냅샷을 삭제한다고 해서 지워지지 않습니다.

그 이유는 바로 스냅샷은 사실 백업된 데이터를 가르키는 레퍼런스이기 때문입니다. 따라서 많은 스냅샷을 가지고 있을 필요없이 한 개의 스냅샷만 가지고 있어도 언제든지 복원이 가능합니다. 단, 해당 인덱스의 모든 스냅샷이 삭제되는 것은 예외입니다. 모든 레퍼런스가 사라졌을 때 ES는 백업된 데이터를 지우게 됩니다.

그렇게 되면 증분해나갈 백업본이 없어져서 다시 처음부터 시간을 소요하여 스냅샷을 생성하는 과정을 거쳐야합니다.

/images/2022-06-03-Elasticsearch-Snapshot/image2.jpg

정리

엘라스틱 서치의 스냅샷 기능에 대해 알아보았습니다. 공식 문서에는 지엽적인 형태로 문서를 제공하고 있어서 직접 사용하면서 확인해야하는 내용이 있었습니다. 스냅샷을 서비스에 적용하기 위해 다양한 방법을 통해 검토하였으며, 이를 통해 올바른 적용 방법에 대해 파악할 수 있었습니다. 이 문서가 서비스에 도움이 되었으면 좋겠습니다.

참고 자료

  • https://www.elastic.co/guide/en/elasticsearch/reference/8.2/snapshot-restore-apis.html