Elasticsearch 디스크 공간과 사용량을 최적화하는 방법

클러스터 비용을 최적화하기 위해 Elasticsearch 디스크가 과도하게 사용된 경우와 디스크 용량이 충분히 활용되지 않는 경우를 예방하고 대응하는 방법을 알아보세요.

Elasticsearch가 처음이신가요? Elasticsearch 입문용 웨비나에 참여하세요. 지금 무료 클라우드 체험을 시작하거나, 내 기기에서 Elastic을 사용해 볼 수 있습니다.

디스크 관리는 모든 데이터베이스에서 중요하며 Elasticsearch도 예외는 아닙니다. 사용 가능한 디스크 공간이 충분하지 않으면 Elasticsearch는 노드에 샤드 할당을 중지합니다. 이렇게 하면 결국 클러스터에 데이터를 쓸 수 없게 되어 애플리케이션에서 데이터가 손실될 수 있는 잠재적 위험이 있습니다. 반면에 디스크 공간이 너무 많으면 필요한 것보다 더 많은 리소스에 대한 비용을 지불하는 것입니다.

워터마크의 배경

Elasticsearch 클러스터에는 사용 가능한 디스크 공간을 추적하는 데 도움이 되는 다양한 "워터마크" 임계값이 있습니다. 노드에서 디스크가 가득 차면 가장 먼저 통과해야 하는 임계값은 '디스크 부족 워터마크'입니다. 그러면 두 번째 임계값은 "높은 디스크 워터마크 임계값"이 됩니다. 마지막으로 '디스크 홍수 단계'에 도달하게 됩니다. 이 임계값을 통과하면 클러스터는 워터마크를 통과한 노드에 하나의 샤드(기본 또는 복제본)가 있는 모든 인덱스에 대한 쓰기를 차단합니다. 읽기(검색)는 계속 가능합니다.

디스크가 너무 꽉 찬 경우(사용량 초과)를 방지하고 처리하는 방법

Elasticsearch 디스크가 너무 꽉 찬 경우를 처리하는 방법에는 여러 가지가 있습니다:

  1. 오래된 데이터를 삭제합니다 : 일반적으로 데이터는 무기한 보관해서는 안 됩니다. 디스크가 너무 꽉 차는 것을 방지하고 해결하는 한 가지 방법은 데이터가 특정 수명에 도달하면 안정적으로 보관 및 삭제되도록 하는 것입니다. 이를 위한 한 가지 방법은 ILM을 사용하는 것입니다.
  2. 스토리지 용량을 추가합니다: 데이터를 삭제할 수 없는 경우, 성능에 부정적인 영향을 주지 않으면서 모든 데이터를 유지하기 위해 데이터 노드를 더 추가하거나 디스크 크기를 늘릴 수 있습니다. 클러스터에 스토리지 용량을 추가해야 하는 경우 스토리지 용량만 추가해야 하는지, 아니면 스토리지 용량과 RAM 및 CPU 리소스를 비례적으로 추가해야 하는지 고려해야 합니다(아래 디스크 크기, RAM 및 CPU 비율 섹션 참조).

Elasticsearch 클러스터에 스토리지 용량을 추가하는 방법

  1. 데이터 노드 수를 늘립니다: 새 노드는 기존 노드와 크기가 같아야 하며 동일한 Elasticsearch 버전이어야 합니다.
  2. 기존 노드의 크기를 늘립니다: 클라우드 기반 환경에서는 일반적으로 기존 노드에서 디스크 크기와 RAM/CPU를 쉽게 늘릴 수 있습니다.
  3. 디스크 크기만 늘리기: 클라우드 기반 환경에서는 디스크 크기를 늘리는 것이 비교적 쉬운 경우가 많습니다.
  4. 스냅샷 복원: 백업에서 자동화된 프로세스를 통해 요청 시 이전 데이터를 검색할 수 있도록 허용하려는 경우, 이전 인덱스를 스냅샷하고, 삭제하고, 스냅샷에서 요청 시 데이터를 임시로 복원할 수 있습니다. 
  5. 샤드당 복제본 수 줄이기: 데이터를 줄이는 또 다른 옵션은 각 샤드의 복제본 수를 줄이는 것입니다. 고가용성을 위해서는 샤드당 하나의 복제본을 사용하는 것이 좋지만, 데이터가 오래되면 복제본 없이도 작업할 수 있습니다. 일반적으로 데이터가 영구적이거나 필요한 경우 복원할 백업이 있는 경우 이 방법을 사용할 수 있습니다.
  6. 알림 만들기: 향후 디스크가 가득 차는 것을 방지하고 선제적으로 대응하려면 디스크 사용량에 따라 디스크가 가득 차기 시작할 때 알려주는 알림을 만들어야 합니다. 

디스크 용량이 제대로 활용되지 않는 경우를 방지하고 처리하는 방법

디스크 용량을 제대로 활용하지 못하는 경우 클러스터의 스토리지 볼륨을 줄일 수 있는 다양한 옵션이 있습니다.

Elasticsearch 클러스터의 스토리지 볼륨을 줄이는 방법

클러스터의 스토리지 용량을 줄이는 방법에는 여러 가지가 있습니다.

1. 데이터 노드 수 줄이기

데이터 저장 공간을 줄이면서 RAM과 CPU 리소스도 같은 비율로 줄이려면 이 방법이 가장 쉬운 전략입니다. 불필요한 노드를 폐기하면 비용을 가장 크게 절감할 수 있습니다.

노드를 폐기하기 전에 노드를 폐기해야 합니다:

  • 해제할 노드가 마스터 노드로서 필요하지 않은지 확인합니다. 항상 마스터 노드 역할이 있는 노드가 3개 이상 있어야 합니다.
  • 폐기할 노드에서 데이터 샤드를 마이그레이션합니다.

2. 기존 노드를 더 작은 노드로 교체

노드 수를 더 줄일 수 없는 경우(일반적으로 3개가 최소 구성) 기존 노드의 크기를 줄일 수 있습니다. 샤드는 노드당 샤드 수에 따라 균형을 맞추기 때문에 모든 데이터 노드의 RAM 메모리와 디스크 크기가 동일한지 확인하는 것이 좋습니다.

그 과정은 다음과 같습니다:

  • 클러스터에 새롭고 작은 노드 추가하기
  • 폐기할 노드에서 샤드를 멀리 마이그레이션합니다.
  • 기존 노드 종료

3. 노드에서 디스크 크기 줄이기

클러스터의 전체 RAM이나 CPU를 변경하지 않고 노드의 디스크 크기만 줄이려는 경우 각 노드의 디스크 크기를 줄일 수 있습니다. Elasticsearch 노드에서 디스크 크기를 줄이는 것은 결코 간단한 과정이 아닙니다.

가장 쉬운 방법은 일반적으로 다음과 같이 하는 것입니다:

  • 노드에서 샤드 마이그레이션
  • 노드 중지
  • 적절한 크기의 새 데이터 볼륨을 노드에 마운트합니다.
  • 이전 디스크 볼륨의 모든 데이터를 새 볼륨으로 복사합니다.
  • 이전 볼륨 A 분리
  • 노드 시작 및 샤드를 다시 노드로 마이그레이션하기

이 과정에서 노드의 여분의 샤드를 임시로 저장할 수 있는 충분한 용량이 다른 노드에 있어야 합니다. 많은 경우, 이 프로세스를 관리하는 데 드는 비용이 디스크 사용량의 잠재적 절감 효과를 초과할 수 있습니다. 따라서 노드를 원하는 디스크 크기의 새 노드로 완전히 교체하는 것이 더 간단할 수 있습니다(위의 "기존 노드를 더 작은 노드로 교체하기" 참조).

불필요한 리소스에 대한 비용을 지불할 때 리소스 활용을 최적화하면 비용을 확실히 줄일 수 있습니다.

디스크 크기, RAM 및 CPU의 관계

클러스터의 디스크 용량과 RAM의 이상적인 비율은 특정 사용 사례에 따라 달라집니다. 따라서 스토리지 용량 변경을 고려할 때는 현재 디스크/RAM/CPU 비율이 적절하게 균형을 이루고 있는지, 결과적으로 RAM/CPU도 같은 비율로 추가/축소해야 하는지 여부도 고려해야 합니다.

RAM 및 CPU 요구 사항은 인덱싱 활동의 양, 쿼리의 수와 유형, 검색 및 집계되는 데이터의 양에 따라 달라집니다. 이는 클러스터에 저장되는 데이터의 양에 비례하는 경우가 많으므로 디스크 크기와도 관련이 있어야 합니다.

디스크 용량과 RAM의 비율은 사용 사례에 따라 변경될 수 있습니다. 여기에서 몇 가지 예를 확인하세요:

인덱스 활동보존검색 활동디스크 용량RAM
엔터프라이즈 검색 앱중간 수준의 로그 수집Long2TB32GB
앱 모니터링집중적인 로그 수집짧은1TB32GB
전자상거래라이트 데이터 인덱싱무기한무거운500GB32GB

노드 머신의 구성을 수정하면 노드 다운타임이 발생할 수 있고 이미 과도하게 확장된 다른 노드로 샤드가 마이그레이션되지 않도록 해야 하므로 신중하게 수행해야 한다는 점을 기억하세요.

관련 콘텐츠

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요