반응형
Elasticsearch
아파치 루씬 (Apache Lucene) 기반의 실시간에 가까운 검색이 가능한 오픈소스 검색엔진
기본적으로 HTTP를 통해 JSON 형식의 RESTful API를 이용하며 자바로 개발됐지만 여러 가지 프로그래밍 언어를 통해 활용할 수 있음.
Logstach
플러그인을 이용해서 다양한 소스의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달함.
Kibana
Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링함.
Elasticsearch vs RDBMS 구조
엘라스틱서치 | 관계형 데이터베이스 (RDBMS) |
Index (인덱스) | Database (데이터베이스) |
Shard (샤드) | Partition (파티션) |
Document (문서) | Row (행) |
Field (필드) | Column (열) |
Mapping (매핑) | Schema (스키마) |
6.0 이하 버전에서는 하나의 인덱스 내부에 기능에 따라 여러 개의 타입을 만들어 사용했지만 6.x 버전부터는 하나의 인덱스에 하나의 타입만을 구성할 수 있다.
7.x 버전부터는 Type이 사라지고, Index가 Table과 유사한 개념을 가지고 있다.
Elasticsearch 구조
[물리적 구조]
(1) Cluster (클러스터)
- Elasticsearch에서 가장 큰 시스템 단위로 최소 1개 이상의 물리적인 노드 인스턴스들의 집합
- 여러 개의 클러스터가 존재할 수 있고 노드는 실시간으로 추가, 제거가 가능하기 때문에 가용성이나 확장성 측면에서 매우 유연함
(2) Node (노드)
- 클러스터처럼 이름으로 식별되며 특정 노드 이름으로 정의할 수 있고, 관리의 목적에 맞게 정의함
- 마스터 노드 (Master Node) : 클러스터 관리 노드. 노드 추가와 제거 같은 클러스터의 전반적인 관리를 담당
- 데이터 노드 (Data Node) : 실질적인 데이터를 저장하고 검색과 통계 같은 데이터 관련 작업을 수행
- 코디네이팅 노드 (Coordination Node) : 사용자의 요청만 받아서 처리. 클러스터 관련 요청은 마스터 노드에 전달하고 데이터 관련 요청은 데이터 노드에 전달
- 인제스트 노드 (Ingest Node) : 문서의 전처리 작업을 담당하고 인덱스 생성 전 문서의 형식을 다양하게 변경할 수 있음
노드 설정은 엘라스틱서치 서버의 conf 폴더 안에 elasticsearch.yml 파일에서 설정하면 된다.
node.master: true / false // 마스터 노드
node.data: true / false // 데이터 노드
node.ingest: true / false // 인제스트 노드
node.remote.connect: true / false // 코디네이팅 노드
(3) Shard (샤드)
- 인덱스 내부에 색인된 데이터는 물리적인 공간에 여러 개의 샤드로 나뉘어 구성됨
- 다수의 샤드로 문서를 분산 저장하고 있어 데이터 손실 위험을 최소화할 수 있음
- 프라이머리 샤드 (Primary Shard) : 데이터의 원본. 엘라스틱서치에서 데이터 업데이트 요청을 날리면 반드시 프라이머리 샤드에 요청을 하게 되고 해당 내용은 레플리카 샤드에 복제된다. 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 한다.
- 레플리카 샤드 (Replica Shard) : 프라이머리 샤드의 복제본. 원본 데이터에 장애가 발생했을 경우 레플리카 샤드를 이용해 샤드를 복구하며 프라이머리 샤드와 서로 다른 노드에 배치된다.
[논리적 구조]
(1) Index (인덱스)
- 색인 과정을 거친 결과물 혹은 색인된 데이터가 저장되는 공간. 인덱스 생성 시 기본적으로 5개의 프라이머리 샤드와 1개의 레플리카 샤드 세트를 생성함.
- 인덱스의 이름은 모두 소문자여야하며 추가, 수정, 삭제, 검색은 RESTful API로 수행할 수 있음.
(2) Type (타입)
- 인덱스의 논리적인 구조를 의미하며, 인덱스 속성에 따라 분류함
- 6.1 버전부터는 인덱스당 하나의 타입만 사용할 수 있고, 7.x 버전부터는 Type이 완전히 사라졌음
(3) Document (문서)
- 엘라스틱서치에서 데이터가 저장되는 최소 단위로 기본적으로 JSON 포맷으로 데이터가 저장된다.
- 하나의 문서는 다수의 필더로 구성돼 있는데 각 필드에는 용도에는 맞는 데이터 타입을 정의해야함
- 중첩 구조를 지원하기 때문에 문서 안에 문서를 지정하는 것도 가능함
(4) Field (필드)
- 문서에 구성하기 위한 속성으로 데이터베이스의 열과 비슷함.
- 데이터베이스의 열이 정적인 데이터 타입이라면 필드는 좀 더 동적인 데이터 타입으로 목적에 따라 다수의 데이터 타입을 가질 수 있다.
(5) Mapping (매핑)
- 문서의 필드와 필드의 속성을 정의하고 그에 따른 색인 방법을 정의하는 프로세스.
- 인덱스 매핑 정보에는 여러 가지 데이터 타입을 지정할 수 있지만 필드명은 중복해서 사용할 수 없다.
반응형
'개발 & 데이터베이스 > Elasticsearch' 카테고리의 다른 글
Elasticsearch 메타 필드 종류와 필드 데이터 타입 (0) | 2024.01.30 |
---|---|
Docker 에 Elasticsearch, Kibana 설치 및 실행 방법 (1) | 2024.01.04 |
[Elastic search] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel (0) | 2024.01.04 |