관리 메뉴

Life goes slowly...

[ELK] ElasticSearch - 분산 검색 엔진 오픈소스 본문

프로그래밍/SQL

[ELK] ElasticSearch - 분산 검색 엔진 오픈소스

빨강소 2020. 9. 18. 12:43
728x90
반응형

 

ElasticSearch 란?

Apache Lucene을 기반으로 구축된 많은 양 그리고 모든 유형의 데이터들을 위한 Java 분산형 오픈소스 검색 및 분석 엔진입니다.

간단한 Rest API, 분산형 특징, 속도, 확장성으로 유명하며 데이터 수집, 보강, 저장, 분석, 시각화를 위한 오픈소스 도구 모임인 Elastic Stack의 구성요소 중에 중심이 되는 요소입니다.

ELK(ElasticSearch, Logstash, Kibana) Stack 중에서 데이터를 색인하는 역할을 하고 있습니다.

ElasticSearch를 통하여 루씬 라이브러리를 단독으로 사용할 수 있으며, 방대한 양의 데이터를 신속하고 실시간으로 저장 및 검색, 분석할 수 있습니다. ElasticSearch는 다양한 언어를 지원하며 Java, Javascript, Node.js, Go, PHP, Python, Ruby 등 여러 클라이언트에 제공되고 있습니다.

 

ElasticSearch 사용 용도

ElasticSearch는 속도와 확장성, 그리고 수많은 데이터를 색인할 수 있는 능력이 있어서 다양한 곳에서 사용되고 있습니다.

  • 애플리케이션 검색 및 성능 모니터링
  • 웹 사이트 검색
  • 엔터프라이즈 검색
  • 로깅과 로그 분석
  • 인프라 메트릭과 컨테이너 모니터링
  • 위치 기반 정보 데이터 분석 및 시각화
  • 보안 및 비즈니스 분석

 

ElasticSearch 장점
  • 빠른 속도로서 실시간 검색이 가능합니다. ElasticSearch는 보안 분석, 인프라 모니터링과 같은 사용에 가장 좋습니다.
  • 분산적인 특징으로 수백 개의 서버까지 확장이 가능하며 대용량의 데이터의 처리도 가능하게 해줍니다.
  • 속도, 확장성, 복원력 뿐만 아니라 데이터 롤업, 인덱스 수명 주기 관리 등 과같이 데이터를 효율적으로 저장하고 검색이 가능합니다.
  • ELK로써 데이터 수집, 시각화, 보고를 간소화할 수 있습니다.

 

ElasticSearch와 관계형 DB 비교

ElasticSearch

Relational DB

Index

Database

Type

Table

Document

Row

Field

Column

Analyze

index

_id

Primary Key

Mapping

Schema

Shard

Physical partition

Route

Logical partition

Parent/Child, Nested

Relational

Query DSL

SQL

 

CRUD

ElasticSearch

Relational DB

READ

GET

SELECT

UPDATE

PUT

UPDATE

CREATE

POST

INSERT

DELETE

DELETE

DELETE

 

ElasticSearch 구성요소

1. 클러스터(Cluster)- ElasticSearch에서 가장 큰 시스템 단위를 의미하며, 최소 하나 이상의 노드로 이루어진 노드들의 집합을 말합니다. 서로 다른 클러스터는 데이터의 접근, 교환을 할 수 없는 독립적인 시스템으로 유지되며, 여러 대의 서버가 하나의 클러스터를 구성할 수 있고, 한 서버에 여러 개의 클러스터가 존재할 수도 있습니다. 클러스터는 연합된 인덱싱과 모든 노드를 검색할 수 있는 기능을 제공하며 유일한 이름으로 판별됩니다.

2. 노드(Node)- ElasticSearch를 구성하는 하나의 단위 프로세스를 의미하며, 데이터를 보관하고 클러스터 인덱싱과 검색 능력에 관여합니다. 노드는 맡은 역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분이 가능합니다.

  • Master-eligible Node: 클러스터를 제어하는 마스터로 선택이 가능한 노드(인덱스 생성과 삭제, 클러스터 노드들의 추적 및 관리)
  • Data Node: 데이터와 관련된 CRUD 작업 노드(master 노드와 분리 필요)
  • Ingest Node: 데이터 변환하는 사전 처리 파이프라인을 실행하는 역할
  • Tribe Node: 로드밸러스와 비슷한 역할(Master-eligible Node, Data Node의 일을 대신하는 노드)

3. 인덱스(Index)- 비슷한 특성을 가진 도큐먼트의 집합으로 이름으로 구분되어 지며 인덱싱, 검색, 업데이트, 삭제를 수행하는 동안에 인덱스를 참조하기 위해 사용됩니다. 삭제 명령은 인덱스 내부의 도큐먼트에서 이루어집니다.

4. 도큐먼트(Document) - 인덱싱 될 수 있는 정보의 기본단위로 볼 수 있습니다. 도큐먼트는 데이터 교환 포맷인 JSON 형태로 표현됩니다.

5. 샤드(Shards)- 인덱스를 여러 개의 조각으로 나누어지는 형태를 샤드라고 하며, 그러한 행태 데이터를 분산해서 저장하는 방법을 샤딩(SHarding)이라고 합니다. 기본적으로 1개가 존재하며, 검색 성능 향상을 위해서 클러스터의 샤드 개수를 조정하는 튜닝을 하기도 합니다. 게다가 샤드는 샤드를 거쳐 명령을 분배하고 병렬적으로 처리될 수 있게 해주어 퍼포먼스를 향상하게 해줍니다.

6. 레플리카(Replicas)- 또 다른 형태의 샤드(Shard)라고 할 수 있습니다 노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제하는 것을 말합니다. 노드가 손실되어 대비하여 높은 가용성을 제공하기도 합니다. 레플리카에서 병렬적으로 실행될 수 있게 해주기 때문에 검색의 볼륨 스케일 업을 가능하게 해줍니다.

 

ElasticSearch 특징
  • Scale out - 샤드를 통하여 규모가 수평적으로 늘어날 수 있습니다.
  • 고가용성 - Replica를 통하여 데이터의 안정성을 보장하여 줍니다.
  • Schema Free - Json 문서를 통해서 데이터 검색을 수행하여 스키마 개념이 따로 없습니다.
  • Restful - Data CRUD 작업은 HTTP Restful API 작업을 통해 수행됩니다.
728x90
반응형
Comments