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 및 데이터 분석 도구입니다.
- 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 아키텍쳐 / 핵심 개념
- 클러스터 (Cluster)
: 클러스터는 하나 이상의 노드(서버)가 모인 것이며, 이를 통해 전체 데이터를 저장하고 모든 노드를 포괄하는 통합 색인화 및 검색 기능을 제공합니다. 클러스터는 고유한 이름으로 식별되는데, 기본 이름은 Elasticsearch 입니다.
- 노드가 클러스터에 포함되기 위해서는 이름에 의해 구성원이 되도록 설정되기 때문에 이름은 매우 중요합니다.
- 노드가 잘못된 클러스터에 포함될 위험이 있으므로 동일한 클러스터 이름을 서로 다른 환경에서 재사용하면 안됩니다.
- 예를 들어, 개발-스테이징-프로덕션 클러스터에 logging-dev, logging-stage, logging-prod라는 독립적인 이름을 사용해야 합니다.
- 클러스터에 하나의 노드가 존재하는 것은 유효하며, ㄷ각자 고유한 클러스터 이름을 가진 독립적인 클러스터를 여러개 둘 수 있습니다.
- 노드 (Node)
: Elasticsearch를 구성하는 하나의 단위 프로세스를 말합니다. 역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분됩니다.
Master-eligibla node
클러스터를 제어하는 마스터로 선택할 수 있는 노드를 말합니다. Master 노드가 하는 역할은 아래와 같습니다.
- 인덱스 생성, 삭제
- 클러스터 노드들의 추적, 관리
- 데이터 입력시 어느 샤드에 할당할지 선택
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는 서로 다른 노드에 존재하는 것을 권장합니다.
4. Elasticsearch의 장점
- Elasticsearch는 빠릅니다. Elasticsearch는 Lucene을 기반으로 구축되기 때문에, 전체 텍스트 검색에 뛰어납니다. Elasticsearch는 또한 거의 실시간 검색 플랫폼입니다. 이것은 문서가 색인될 때부터 검색 가능해질 때까지의 대기 시간이 아주 짧다는 뜻입니다. 이 대기 시간은 보통 1초입니다. 결과적으로, Elasticsearch는 보안 분석, 인프라 모니터링 같은 시간이 중요한 사용 사례에 이상적입니다.
- Elasticsearch는 본질상 분산적입니다. Elasticsearch에 저장된 문서는 샤드라고 하는 여러 다른 컨테이너에 걸쳐 분산되며, 이 샤드는 복제되어 하드웨어 장애 시에 중복되는 데이터 사본을 제공합니다. Elasticsearch의 분산적인 특징은 수백 개(심지어 수천 개)의 서버까지 확장하고 페타바이트의 데이터를 처리할 수 있게 해줍니다.
- Elasticsearch는 광범위한 기능 세트와 함께 제공됩니다. 속도, 확장성, 복원력뿐 아니라, Elasticsearch에는 데이터 롤업, 인덱스 수명 주기 관리 등과 같이 데이터를 훨씬 더 효율적으로 저장하고 검색할 수 있게 해주는 강력한 기본 기능이 다수 탑재되어 있습니다.
- Elastic Stack은 데이터 수집, 시각화, 보고를 간소화합니다. Beats와 Logstash의 통합은 Elasticsearch로 색인하기 전에 데이터를 훨씬 더 쉽게 처리할 수 있게 해줍니다. Kibana는 Elasticsearch 데이터의 실시간 시각화를 제공하며, UI를 통해 애플리케이션 성능 모니터링(APM), 로그, 인프라 메트릭 데이터에 신속하게 접근할 수 있습니다.
출처
댓글