본문 바로가기
Infra Engineering/AWS

[AWS] Elasticsearch (1) - 개념 및 종류

by DevBaek 2021. 9. 15.

1. Elasticsearch란

Elasticsearch는 Apache Lucene(아파치 루씬) 기반의 Java 오픈소스 분산 검색 엔진입니다.
Elasticsearch를 통해 루씬 라이브러리를 단독으로 사용할 수 있게 되었으며, 방대한 양의 데이터를 신속하게, 거의 실시간 (Near Real Time, NRT)으로 저장, 검색, 분석할 수 있습니다.

Elasticsearch 특징

  • Scale-out : Shard를 통해 규모가 수평적으로 늘어날 수 있습니다.
  • 고가용성 : Replica를 통해 데이터의 안정성을 보장합니다.
  • Schema Free : Json 문서를 통해 데이터 검색을 수행하므로 스키마 개념이 없습니다.

ELK 스택

Elasticsearch는 검색만을 위해 단독으로 사용되기도 하지만, ELK(Elasticsearch / Logstash / Kibana) 스택으로 사용되기도 합니다.

ELK는 아래 그림과 같이, 분석 및 저장 기능을 담당하는 Elasticsearch, 수집 기능을 하는 Logstash, 시각화 하는 도구인 Kibana의 약어입니다.

ELK는 접근성과 용이성이 좋아 최근 핫한 Log 및 데이터 분석 도구입니다.

ELK 이미지

- Logstash

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

- Elasticsearch

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

- Kibana

: Elasticsearch의 빠른 검색을 이용하여 데이터를 시각화하거나 모니터링합니다.

 

2. Elasticsearch와 RDB 비교

Relational Database Elasticsearch
Database Index
Table Type
Row Document
Column Field
INdex Analyze
Schema Mapping
SQL Query DSL
Primary Key _id
Physical partition Shard
Logical partition Parent/Child, Nested
Relational Database Elasticsearch CRUD
SELECT GET READ
UPDATE PUT UPDATE
INSERT POST CREATE
DELETE DELETE DELETE

 

3. Elasticsearch 아키텍쳐 / 핵심 개념

Elasticsearch Architecture

- 클러스터 (Cluster)

: 클러스터는 하나 이상의 노드(서버)가 모인 것이며, 이를 통해 전체 데이터를 저장하고 모든 노드를 포괄하는 통합 색인화 및 검색 기능을 제공합니다. 클러스터는 고유한 이름으로 식별되는데, 기본 이름은 Elasticsearch 입니다.

  • 노드가 클러스터에 포함되기 위해서는 이름에 의해 구성원이 되도록 설정되기 때문에 이름은 매우 중요합니다.
  • 노드가 잘못된 클러스터에 포함될 위험이 있으므로 동일한 클러스터 이름을 서로 다른 환경에서 재사용하면 안됩니다.
  • 예를 들어, 개발-스테이징-프로덕션 클러스터에 logging-dev, logging-stage, logging-prod라는 독립적인 이름을 사용해야 합니다.
  • 클러스터에 하나의 노드가 존재하는 것은 유효하며, ㄷ각자 고유한 클러스터 이름을 가진 독립적인 클러스터를 여러개 둘 수 있습니다.

 

- 노드 (Node)

: Elasticsearch를 구성하는 하나의 단위 프로세스를 말합니다. 역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분됩니다.

 

Master-eligibla node

  클러스터를 제어하는 마스터로 선택할 수 있는 노드를 말합니다. Master 노드가 하는 역할은 아래와 같습니다.

  1. 인덱스 생성, 삭제
  2. 클러스터 노드들의 추적, 관리
  3. 데이터 입력시 어느 샤드에 할당할지 선택

Data node

  데이터와 관련된 CRUD 작업과 관련있는 노드입니다. CPU, 메모리 등 자원을 많이 소모하므로 지속적인 모니터링이 필요하며

  master 노드와 분리되는 것이 좋습니다.

 

Ingest node

  데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역할을 합니다.

 

Coordination only node

  data node와 master-eligible node의 일을 대신하는 역할을 합니다.

  대규모 클러스터에서 큰 이점이 있으며, 로드밸런서와 비슷한 역할을 합니다.

 

- 인덱스(Index) / 샤드(Shard) / 복제(Replica)

:Elasticsearch에서 Index는 RDB에서의 Database와 대응하는 개념입니다.

또한 Shard와 Replica는 Elsaticsearch에서만 존재하는 개념이 아니라, 분산 데이터베이스 시스템에도 존재하는 개념입니다.

 

샤딩(Sharding)은 데이터를 분산해서 저장하는 방법을 의미합니다.

Elasticsearch에서 Scale-out을 위해 Index를 여러 Shard로 쪼개는 것 입니다.

기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터의 샤드 개수를 조정하기도 합니다.

 

복제(Replica)는 다른 형태의 Shard라고 할 수 있습니다.

노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드를 복제합니다.

따라서 Replica는 서로 다른 노드에 존재하는 것을 권장합니다.

서로 다른 위치에 존재하는 Replica

4. Elasticsearch의 장점

  1. Elasticsearch는 빠릅니다. Elasticsearch는 Lucene을 기반으로 구축되기 때문에, 전체 텍스트 검색에 뛰어납니다. Elasticsearch는 또한 거의 실시간 검색 플랫폼입니다. 이것은 문서가 색인될 때부터 검색 가능해질 때까지의 대기 시간이 아주 짧다는 뜻입니다. 이 대기 시간은 보통 1초입니다. 결과적으로, Elasticsearch는 보안 분석, 인프라 모니터링 같은 시간이 중요한 사용 사례에 이상적입니다.
  2. Elasticsearch는 본질상 분산적입니다. Elasticsearch에 저장된 문서는 샤드라고 하는 여러 다른 컨테이너에 걸쳐 분산되며, 이 샤드는 복제되어 하드웨어 장애 시에 중복되는 데이터 사본을 제공합니다. Elasticsearch의 분산적인 특징은 수백 개(심지어 수천 개)의 서버까지 확장하고 페타바이트의 데이터를 처리할 수 있게 해줍니다.
  3. Elasticsearch는 광범위한 기능 세트와 함께 제공됩니다. 속도, 확장성, 복원력뿐 아니라, Elasticsearch에는 데이터 롤업, 인덱스 수명 주기 관리 등과 같이 데이터를 훨씬 더 효율적으로 저장하고 검색할 수 있게 해주는 강력한 기본 기능이 다수 탑재되어 있습니다.
  4. Elastic Stack은 데이터 수집, 시각화, 보고를 간소화합니다. Beats와 Logstash의 통합은 Elasticsearch로 색인하기 전에 데이터를 훨씬 더 쉽게 처리할 수 있게 해줍니다. Kibana는 Elasticsearch 데이터의 실시간 시각화를 제공하며, UI를 통해 애플리케이션 성능 모니터링(APM), 로그, 인프라 메트릭 데이터에 신속하게 접근할 수 있습니다.

 

출처

댓글