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개의 레플리카를 할당한다.