엘라스틱 서치란?

엘라스틱 서치란 아파치 루씬기반의 오픈소스 실시간 분산 검색 엔진이다.

 

즉, 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 무료 검색 및 분석 엔진이다.

 

서버 확장이 매우 편리하며, 실시간 검색 서비스 지원, 분산 및 병렬 처리, 멀티테넌시 기능을 제공하고 다양한 플러그인 지원, 클러스터로 

 

구성 가능하여 검색 대상의 용량이 증가했을 때 대응하기가 매우 수월하다.

 

엘라스틱 서치는 검색을 위해 단독으로 사용되기도 하며 ELK 스택으로 사용되기도 한다.

 

ELK 스택 구성

1. Logstash : 다양한 소스(DB, csv 파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 ElasticSearch로 전달.

2. ElasticSearch : Logstash로부터 받은 데이터를 검색 및 집계하여 필요한 정보를 획득.

3. Kibana : ElasticSearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링.

 

특징
  1. 오픈소스 
  2. 분산 시스템, 확장성 : 엘라스틱 서치는 네트워크상에 있는 노드들과 바인딩 되어있어 클러스터를 구성할 수 있다. 샤드를 기반으로 색인 데이터를 관리하고 운영중에도 노드가 추가되면 샤드를 새로운 노드로 적절히 재분배하여 유지하기 때문에 쉽게 스케일 아웃(확장)이 가능하다.
  3. 고가용성 : 샤드는 기본적으로 하나 이상의 복제본을 중복되지 않는 서로 다른 노드에 배치한다. 그러므로 시스템 운영 중 어느 한 노드가 다운되더라도 데이터 유실 없이 동일한 검색 결과를 얻을 수 있다.
  4. 실시간 검색 : 실시간에 가까운 속도로 색인된 데이터의 검색과 분석이 가능하다. 클러서가 실행되는 동안 계속해서 데이터가 입력된다(즉, 색인 과정)
  5. JSON 문서 기반 : 질의에 사용되는 쿼리문과 결과 모두 JSON이라 직관적이다.
  6. RESTful API : REST API를 기본을 지원하며 모든 데이터의 연산 과정을 HTTP 프로토콜 메소드를 통해 처리한다.

 

단점
  1. 진입 장벽이 있다.
  2. Document 간의 조인을 수행할 수 없다. (두번 쿼리로 해결 가능)
  3. 트랜잭션 및 롤백이 제공되지 않는다.
  4. 실시간 처리가 불가능 (색인되 데이터가 1초 뒤에나 검색이 가능)

 

RDBMS와 비교
RDBMS ElasticSearch
Database Index
Table Type
Row Document
Column Field
Index Analyze
Primary Key _id
Schema Mapping
Physical partition Shard
Logical partition Route
Relational Parent/Chid, Nested
SQL Query DSL

클러스터 : 엘라스틱 서치에서 가장 큰 시스템 단위를 의미하며, 최소 하나 이상의 노드로 이루어진 노드의 집합. 서로 다른 클러스터는 서로 접근할 수 없는 독립적인 시스템으로 유지되며, 여러 대의 서버가 하나의 클러스터를 구성할 수 있고 한 서버에 여러 개의 클러스터가 존재할 수 있다.

 

노드 : 클러스터에 포함된 단일 서버로서 데이터를 저장하고 클러스터의 색인화 및 검색 기능에 참여한다. 노드는 역할에 따라 Master-eligible, Data, Ingest, Coordinating 노드로 구분할 수 있다.

 

(1) Master-eligible 노드 : 클러스터를 제어하는 마스터로 선택할 수 있는 노드. 역할로는 인덱스 생성 및 삭제, 클러스터 노드의 추적 및 관리, 데이터 입력 시 할당한 샤드 선택이 있다.

(2) Data 노드 : 데이터가 저장되는 노드이며 데이터가 분산 저장되는 물리적 공간인 샤드가 배치되는 노드이다. 많은 리소스(CPU, 메모리 등)이 필요하며 마스터 노드와는 분리해야한다. 모니터링 작업도 필요.

(3) Ingest 노드 : 데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역할.

(4) Coordinating 노드 : 사용자의 요청을 받고 라운드 로빈 방식으로 분산을 하는 노드로 클러스터에 관련된 것은 마스터 노드로 넘기고 데이터와 관련된 것은 데이터 노드로 놈긴다. 로드밸런싱 역할.

 

※ 샤드 : 인덱스 내부에는 색인된 데이터를이 존재하는데 이 데이터들은 하나로 뭉쳐서 존재하지 않고 물리적 공간에 여러 부분으로 나뉘어 존재한다. 이러한 부분을 샤드라고 한다. 스케일 아웃(확장)을 위해 하나의 인덱스를 여러 샤드로 나누었다고 생각하면 된다.

 

샤드는 프라이머리 샤드와 레플리카 샤드로 나뉜다.

(1) 프라이머리 샤드 : 데이터의 원본. 엘라스틱 서치에서 데이터 업데이트 요청을 날리면 프라이머리 샤드에 요청하게 되고 해당 내용은 레플리카 샤드에 복제된다. 검색 성능 향상을 위해 클러스터의 샤드 개수를 조정하기도 한다.

(2) 레플리카 샤드 : 프라이머리 샤드의 복제본이다. 기존 원본 데이터가 위험해졌을 때 그 대신 사용하면서 장애를 극복한느 역할을 수행.

프라이머리 샤드와는 다른 노드에 배정.

+ Recent posts