개발 & 데이터베이스/Elasticsearch

Elasticsearch 기초 개념과 구조 정리

K.두부 2024. 1. 8. 14:28
반응형

 

출처: https://www.edureka.co/blog/elk-stack-tutorial/

Elasticsearch

아파치 루씬 (Apache Lucene) 기반의 실시간에 가까운 검색이 가능한 오픈소스 검색엔진

기본적으로 HTTP를 통해 JSON 형식의 RESTful API를 이용하며 자바로 개발됐지만 여러 가지 프로그래밍 언어를 통해 활용할 수 있음.

 

Logstach

플러그인을 이용해서 다양한 소스의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달함.

 

Kibana

Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링함.

 

 

Elasticsearch vs RDBMS 구조

엘라스틱서치 관계형 데이터베이스 (RDBMS)
Index (인덱스) Database (데이터베이스)
Shard (샤드) Partition (파티션)
Type (타입)  Table (테이블)
Document (문서) Row (행)
Field (필드) Column (열)
Mapping (매핑) Schema (스키마)

6.0 이하 버전에서는 하나의 인덱스 내부에 기능에 따라 여러 개의 타입을 만들어 사용했지만 6.x 버전부터는 하나의 인덱스에 하나의 타입만을 구성할 수 있다.

 

7.x 버전부터는 Type이 사라지고, Index가 Table과 유사한 개념을 가지고 있다.

 

 

Elasticsearch 구조

[물리적 구조]

(1) Cluster (클러스터)

  • Elasticsearch에서 가장 큰 시스템 단위로 최소 1개 이상의 물리적인 노드 인스턴스들의 집합
  • 여러 개의 클러스터가 존재할 수 있고 노드는 실시간으로 추가, 제거가 가능하기 때문에 가용성이나 확장성 측면에서 매우 유연함

 

(2) Node (노드)

  • 클러스터처럼 이름으로 식별되며 특정 노드 이름으로 정의할 수 있고, 관리의 목적에 맞게 정의함

 

  1. 마스터 노드 (Master Node) : 클러스터 관리 노드. 노드 추가와 제거 같은 클러스터의 전반적인 관리를 담당
  2. 데이터 노드 (Data Node) : 실질적인 데이터를 저장하고 검색과 통계 같은 데이터 관련 작업을 수행
  3. 코디네이팅 노드 (Coordination Node) : 사용자의 요청만 받아서 처리. 클러스터 관련 요청은 마스터 노드에 전달하고 데이터 관련 요청은 데이터 노드에 전달
  4. 인제스트 노드 (Ingest Node) : 문서의 전처리 작업을 담당하고 인덱스 생성 전 문서의 형식을 다양하게 변경할 수 있음

 

노드 설정은 엘라스틱서치 서버의 conf 폴더 안에 elasticsearch.yml 파일에서 설정하면 된다.

node.master: true / false // 마스터 노드
node.data: true / false // 데이터 노드
node.ingest: true / false // 인제스트 노드
node.remote.connect: true / false // 코디네이팅 노드

 

(3) Shard (샤드)

  • 인덱스 내부에 색인된 데이터는 물리적인 공간에 여러 개의 샤드로 나뉘어 구성
  • 다수의 샤드로 문서를 분산 저장하고 있어 데이터 손실 위험을 최소화할 수 있음

 

  1. 프라이머리 샤드 (Primary Shard) : 데이터의 원본. 엘라스틱서치에서 데이터 업데이트 요청을 날리면 반드시 프라이머리 샤드에 요청을 하게 되고 해당 내용은 레플리카 샤드에 복제된다. 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 한다.
  2. 레플리카 샤드 (Replica Shard) : 프라이머리 샤드의 복제본. 원본 데이터에 장애가 발생했을 경우 레플리카 샤드를 이용해 샤드를 복구하며 프라이머리 샤드와 서로 다른 노드에 배치된다.

 

 

[논리적 구조]

(1) Index (인덱스)

  • 색인 과정을 거친 결과물 혹은 색인된 데이터가 저장되는 공간. 인덱스 생성 시 기본적으로 5개의 프라이머리 샤드와 1개의 레플리카 샤드 세트를 생성함.
  • 인덱스의 이름은 모두 소문자여야하며 추가, 수정, 삭제, 검색은 RESTful API로 수행할 수 있음.

 

(2) Type (타입)

  • 인덱스의 논리적인 구조를 의미하며, 인덱스 속성에 따라 분류함
  • 6.1 버전부터는 인덱스당 하나의 타입만 사용할 수 있고, 7.x 버전부터는 Type이 완전히 사라졌음

 

(3) Document (문서)

  • 엘라스틱서치에서 데이터가 저장되는 최소 단위로 기본적으로 JSON 포맷으로 데이터가 저장된다.
  • 하나의 문서는 다수의 필더로 구성돼 있는데 각 필드에는 용도에는 맞는 데이터 타입을 정의해야함
  • 중첩 구조를 지원하기 때문에 문서 안에 문서를 지정하는 것도 가능함

 

(4) Field (필드)

  • 문서에 구성하기 위한 속성으로 데이터베이스의 열과 비슷함. 
  • 데이터베이스의 열이 정적인 데이터 타입이라면 필드는 좀 더 동적인 데이터 타입으로 목적에 따라 다수의 데이터 타입을 가질 수 있다.

 

(5) Mapping (매핑)

  • 문서의 필드와 필드의 속성을 정의하고 그에 따른 색인 방법을 정의하는 프로세스.
  • 인덱스 매핑 정보에는 여러 가지 데이터 타입을 지정할 수 있지만 필드명은 중복해서 사용할 수 없다.
반응형