ElasticSearch 컨셉

ElasticSearch 컨셉

Aug 27, 2019    

ElasticSearch concepts

  • Full-text 검색엔진
  • 실시간(near real time) 데이터 적재/검색/분석
    • Near Realtime: 인덱스에 도큐먼트를 추가하고 검색이 가능해지려면 약 1초정도의 시간이 필요하다.

클러스터

  • 하나 이상의 노드(서버)의 집합
  • 클러스터는 유일한 이름으로 식별되고 기본값은 “elasticsearch”
  • 노드가 클러스터에 조인할때 클러스터를 식별할 수 있는 이름이 필요함

노드

  • 클러스터의 한 부분을 차지하는 서버
  • 데이터를 적재
  • 클러스터 인덱싱/검색 케파를 늘리는 역할
  • 노드도 이름으로 구분되고 노드서버를 구동할때 UUID값으로 지정됨

인덱스

  • 유사한 특징을 가진 도큐먼트의 모음 → RDB의 Database?
  • 인덱스 이름은 소문자로 시작해야함
  • 싱글 클러스터에서 원하는 만큼 인덱스를 정의할 수 있음

타입

  • 인덱스 내에서 도큐먼트를 분류해서 데이터를 저장할 수 있는 논리개념
  • 하나의 인덱스는 하나의 타입만 가질 수있음 (v6.x ↑)

도큐먼트

  • 인덱싱할 수 있는 데이터의 기본 단위
  • JSON 포맷으로 표현됨
  • 도큐먼트는 인덱스 내 타입에 할당되어야 함

Shards

  • 인덱스는 싱글 노드의 케파를 초과하는 데이터를 저장할 수 있음
    • example: 싱글 인덱스가 1TB 이상의 도큐먼트를 가지고 있는 경우 싱글 노드의 디스크로 적재가 되지 않거나 검색요청을 처리하는데 느려질 수 있음
  • 인덱스를 여러 조각으로 쪼개서 저장한다. 이를 shards라고 부름
  • shards의 개수는 정의할 수 있음
  • 각 샤드는 클러스터의 특정 노드에서 호스팅될 수 있는 독립적인 인덱스임
  • 샤드는 수평적으로 분리하고 데이터 볼륨의 스케일링을 가능하게 한다.
  • 샤드는 분산/병렬 동작을 허용함으로써 퍼포먼스 및 처리능력을 향상시킨다.

Replicas

  • 네트워크/클라우드 환경에서 failure(서비스 요청 실패 or 서버 hang같은 상황)은 언제나 발생할 수 있음
  • 이에 대한 failover 기술이 요구됨
    • example: 특정 샤드/노드가 오프라인이거나 찾을 수 없는 경우
  • ES는 각 샤드에 대해 하나 이상의 복제본을 생성해두고 이를 replica shards 혹은 replicas라고 부름
  • 레플리카는 고가용성(High availability)를 보장한다.
  • 레플리카는 데이터 볼륨을 스케일-아웃하거나 병렬 처리로 인한 처리능력 향상을 가능하게 한다.
  • 샤드와 레플리카의 개수는 인덱스를 생성할 때나, 그 후에도 정의/변경할 수 있다. (API: _shrink, _split)
  • 기본적으로 인덱스는 5개의 샤드와 1개의 레플리카를 할당한다.