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 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요