ElasticSearch의 이해

Jang Dong Ik·2025년 1월 21일
post-thumbnail

정보검색이란?


사용자가 필요로 하는 정보를 방대한 DB에서 빠르고 정확하게 찾아내어 제공하는 기술 및 서비스입니다.

  • 크롤링 및 색인
    웹크롤러는 인터넷상을 돌아다니면서 데이터를 수집합니다. 즉, 데이터를 수집하고 색인 작업을 실시합니다. 색인은 데이터의 키워드와 메타데이터등을 분석하고 DB에 저장하는 작업입니다. 색인 작업이 끝난뒤에는 검색에 필요한 형태로 재구성 됩니다.

  • 데이터 유형
    비정형 데이터 형태로도 검색이 가능해야 합니다.

  • 검색 쿼리
    키워드, 질의, 조건을 기반으로 정확도가 높은 결과를 반환해야합니다.


정보검색 요구사항


다음과 같은 요구사항을 지녔습니다.

  • 빠르고 정확한 검색 결과 제공
  • 사용자 경험 최적화
  • 보안 및 개인 정보 보호
  • 확장성 및 유지보수 용이
  • 상호 운영성 및 통합성

기존 SQL의 한계


기존의 SQL은 어떤 한계가 있었고, 어떠한 이유로 ElasticSearch 가 각광받을 수 있었을까요?

  • 성능 이슈
    기존의 like 질의는 유연성과 정확성이 떨어집니다. 예를 들어 "흰색 신발" 을 검색한다고 하였을때 누군가는 "하얀색 신발" 또 누군가는 "흰 신발" 혹은 "흰 운동화" 이런식으로 검색을 할 경우 기존의 like 질의는 문제가 됩니다.

  • 실시간 반영
    데이터가 실시간으로 반영이 되어야 하는데 기존의 SQL은 실시간 반영에서 성능적인 이슈가 발생합니다.


좋은 검색 시스템이란?


정밀도와 재현율은 보통 TRADE OFF 관계입니다. 따라서 적절한 균형을 잡아야 합니다.

  • 정밀도
    검색 결과가 실제 원하는 문서를 잘 찾았는지의 비율입니다.

  • 재현율
    관련 문서를 얼마나 잘 찾았는지의 비율입니다.


왜 Elastic 을 사용하는 것일까?


사실 Elastic Search 만이 답은 아닙니다. splunk는 로그데이터 검색 및 분석, 실시간 빅데이터에 유리합니다. 또한 OpenSearch 는 오픈소스로 맞춤형 검색이 가능합니다. Elastic Search 의 장점에 대해 파악해봅시다.

  • 강력한 검색엔진
    루씬 기반의 검색엔진으로 복잡한 데이터 셋에서 정보를 신속하고 정확하게 검색이 가능합니다. 또한 실시간 처리에 용이합니다.

  • 유연한 색인화 및 API 지원
    RESTful api를 통한 쿼리를 수행할 수 있으며 동기적 비동기적 실행을 통해 대용량 데이터 처리에 적합합니다. 또한 JSON 형식 색인화, 개발자를 위한 다양한 언어 SDK를 제공합니다.

  • 다양한 데이터 관리 지원
    강력한 모니터링 툴인 Kibana를 통해 시각화와 모니터링이 가능하고 APM, 로그, 인프라 메트릭 데이터 분석이 가능합니다.

  • 분산시스템 및 효율적 데이터 관리
    샤드 개념을 통하여 빠른 복구가 가능하고 데이터 롤업 및 인덱스 수명주기를 관리할 수 있습니다.


Elastic 에코시스템


Elastic 에코시스템 = Elasticsearch + Logstash + Beats + Kibana

Elasticsearch

  • 자동완성, 필터, 랭킹 기능을 통한 검색결과 제공
    검색엔진을 활용하여 사용자에게 적합한 검색 결과를 제공하여 사용자 경험을 최적화 합니다.

  • 강력한 보안 기능
    인증로그, 감사로그를 활용하여 보안 위협에 대응합니다.

  • APM 도구
    미들웨어와 애플리케이션 로그 수집 및 관찰을 통한 알람을 활용할 수 있고 성능 모니터링이 가능합니다.

  • 매트릭스 시각화
    데이터를 매트릭스로 시각화하고 분석할 수 있습니다.

  • 서비스 모니터링 기능
    서비스에 영향을 미치기 전 자원 모니터링 체크를 할 수 있습니다.

Beats

경량 데이터 수집기로 다양한 모듈로 구성되어 특정 데이터 소스에 따라 데이터를 수지하는 역할을 합니다.

Kibana

데이터 시각화 툴로 데이터를 통한 그래프, 차트, 지도 등 대시보드를 구성합니다. 또한 검색 쿼리를 작성하고 검색해 볼수 있는 화면을 제공합니다.

엑셀러레이트(Elastic APM)

애플리케이션 성능 모니터링 도구로 내부의 성능 수집 및 모니터링(트랜잭션, 지연분석)
다양한 애플리케이션 프레임워크와 언어를 지원합니다.


노드 구성 및 역할의 이해


관계형 DBElasticsearch
테이블인덱스
SQLQueryDSL
document
컬럼field
물리파티션shards
스키마mapping

인덱스의 구성

업로드중..

  • 인덱스
    데이터 저장 및 검색을 위한 주요 데이터 구조
  • 도큐먼트
    인덱스 내에 JSON 형식의 데이터 기본 단위
  • 필드와 값
    각 문서는 데이터 속성이나 특성을 나타내는 필드로 구성

  • 필드 내 데이터 단위로 Elasticsearch 에 색인되고 검색 할 단어 저장

노드 구성 및 역할 이해


마스터 노드

  • Elasticsearch 클러스터의 핵심 관리자로 클러스터의 안정적인 운영을 책임집니다.
  • 클러스터 내 인덱스 생성 및 삭제, 노드 관리, 샤드 분배 등 중요한 결정을 내립니다.
  • 클러스터의 연속적인 서비스 제공을 위해 적어도 한개 이상의 마스터 노드가 필요하나 운영환경에서는 3개 이상의 마스터 노드를 두어 장애 발생 시 안정성 보장을 권장합니다.
  • 클러스터 상태를 모니터링 하며, 필요한 경우 마스터 노드 역할을 수행 할 수 있는 노드로의 전환을 관리합니다.

데이터 노드

  • Elasticsearch 클러스터에서 데이터를 실제로 저장하고 관리하는 역할을 합니다.
  • 색인, 검색, 집계 등을 담당하며 CPU, I/O, 메모리와 같은 하드웨어 리소스를 많이 소모합니다.
  • 클러스터의 안정성을 위해, 데이터 노드는 적절한 수의 노드를 유지하고 장애 발생시를 대비하여 적절한 샤드 운영을 해야 합니다.
  • 데이터 노드의 종류는 여러가지가 있으며 데이터의 특성과 접근 패턴에 맞게 조정합니다.
  • 데이터 노드 구성은 성능 최적화와 클러스터의 안정성, 비용적인 측면에서 직접적인 영향을 끼칩니다.

데이터 노드 종류

  • data_content
    지속적으로 유지되어야 하는 데이터를 저장합니다. 주로 읽기 작업이 많은 검색 혹은 집계 쿼리에 사용됩니다.

  • data_hot
    최신 시계열 데이터를 바르게 읽고 쓰는데 필요합니다. 고성능 SSD와 같은 저장 장치를 사용하여 최근 데이터를 엑세스 합니다.

  • data_warm
    쿼리 빈도가 낮을 데이터를 보관하며, 효율적인 HDD를 활용하여 몇 주 전 데이터를 저장합니다.

  • data_cold
    빠르게 검색할 필요가 없는 오래된 데이터를 보관하며 data_warm 에서 온 데이터들이다. 필요에 따라 구성하지 않는 경우도 존재

  • data_frozen
    거의 사용되지 않거나 아카이브 목적의 데이터 저장 목적이며, s3 등 보관한다.

인제스트 노드

  • 데이터 수집, 가공 및 색인 전달 과정을 관리하는 노드입니다.
  • 데이터를 전처리하여 다양한 소스의 데이터를 효과적으로 처리하고 필터링, 파싱, 변환 등 데이터를 최적화 형식으로 가공합니다.
  • 로그, 센서 데이터, 웹크롤링 결과 등 다양한 데이터 유형을 처리할 수 있으며, 가공된 데이터를 데이터 노드에 색인하여 저장합니다.
  • 데이터 처리 과정에서 리소스 사용이 높기 때문에 인제스트 노드와 데이터 노드들을 분리하여 운영하는 것이 좋습니다.
  • 인제스트 노드는 데이터 노드와 함께 구성되어 데이터 처리 및 색인 프로세스를 효율적으로 수행합니다.

그 밖의 노드

elasticsearch.yml 설정을 통해 역할을 할당합니다.

  • 코디네이팅 노드
    클러스터의 요청을 라우팅하고 상태를 관리하는 역할로 대규모 클러스에서는 별도로 분리 운영합니다. 소규모의 경우는 데이터와 마스터 노드가 이 역할을 수행합니다.

  • 머신러닝 노드
    머신러닝 기능을 제공하며, 데이터학습, 이상탐지, 예측 등 작업을 처리합니다.

  • 리모트 클러스터 클라이언트
    다른 클러스터와 연결을 관리하고 여러 클러스터 간의 데이터 검색이 가능하도록 담당합니다.

  • Transform 노드
    인덱스 간 데이터를 자동으로 복사, 변환하는 역할을 수행합니다.

노드 종류별 요구되는 시스템 리소스

저장소메모리CPU
데이터노드ExtremeHighHigh
마스터노드LowLowLow
인제스트노드LowMediumHigh
코디네이팅노드LowMediumMedium

데이터 노드의 경우 충분한 메모리가 필요로 하는데 16GB 이상의 메모리가 권장됩니다.
마스터 노드의 경우 관리의 경량적인 작업을 맡습니다. 따라서 낮은 CPU, 2GB 이상의 메모리가 권장됩니다.


클러스터 역할 이해


하나 이상의 노드로 구성하여 노드들이 협력하여 데이터 저장, 검색 및 분석 작업을 수행합니다. 각 노드는 고유한 이름, IP 를 통해 식별되며 클러스터에 가입하여 클러스터 전반적인 상태를 관리합니다. 데이터 관련 작업을 처리합니다. 다양한 룰을 통해 각 노드에 특정 기능과 권한을 할당하며 데이터의 안정성가용성을 보장하기 위해 가용영역에 걸쳐 노드를 분산 배치합니다. 대용량 데이터를 효율적으로 처리할 수 있으며 필요에 따라 확장이 용이합니다.


데이터 노드 샤드의 이해


샤드는 데이터를 효율적으로 분산 저장하고 관리하는 핵심 역할을 합니다.

프라이머리 샤드

  • 원본 데이터를 관리합니다.
  • 색인 작업을 담당합니다.
  • 데이터가 클러스터에 저장될 때 활성화 되어 작업합니다.

레플리카 샤드

  • 데이터 복사본을 관리합니다.
  • 데이터의 안정성을 지키고 읽기 요청 부하 분산 작업을 합니다.

노드 간의 샤드 배치는 클러스터 성능에 굉장히 중요합니다. 노드에 샤드가 고르게 분포될 경우 검색 시간을 단축시킬 수 있고 시스템의 처리량을 증가시킵니다.
레플리카 샤드는 클러스터 내의 데이터 무결성과 가용성을 높이는데 주요 역할을 맡습니다. 오류가 생겼을때 레플리카 샤드는 프라이머리 샤드로 자동 승격되어 클러스터의 연속성을 보장합니다.


스케일 업 VS 스케일 아웃


scale-up, scale-out 은 확장 전략입니다.

Scale-up

  • 하드웨어 업그레이드를 통한 단일 노드 성능 향상
  • CPU 메모리 저장 공간 증설
  • 물리적 한계 및 비용 비효율 문제 발생
  • 샤드 성능 향상에 초점

Scale-out

  • 클러스터에 추가 노드 포함하여 확장 = 수평적 확장
  • 별렬 처리 능력 및 데이터 분산 저장 증가
  • 클라우드 환경에서 선호
  • 샤드 분산 및 장애 대비에 초점

0개의 댓글