티스토리 뷰

도움받기

Elasticsearch Getting Simple

초딩영웅 2020. 4. 22. 16:37

1. Elasticsearch

  • Apache Luecene 기반의 Java 오픈소스 분산 검색 엔진이다.
  • 방대한 양의 데이터를 신속하게 거의 실시간으로 저장, 검색, 분석이 가능.
  • ELK (Elasticsearch / Logstash / Kibana) 스택을 구성할 수 있다.
  • Inverted Index 방식으로 조회가 빠르다.

2. ELK (Elasticsearch / Logstash / Kibana)

  • Logstatsh
    - 다양한 소스의 로그 또는 트랜잭션 데잉터를 수집, 집계 파싱하여 Elasticsearch로 전달
  • Elasticsearch
    - Logstash 로 부터 받은 데이터를 검색 및 집계를 하여 필요한 관심 있는 정보를 획득
  • Kibana
    - Elasticsearch 의 빠른 검색을 통해 데이터를 시각화 및 모니터링

ELK Architecture
https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html

Filebeat Direct
Beats and Logstash
TCP, UDP, HTTP Protocols
Integrating with Messaging Queues
Popular

3. 관계형 DB 와 비교

RDBMS Elasticsearch Content
Databasse Index - 인덱스는 RDBMS 에서 database 과 같은 개념.
- 하나의 인덱스는 하나의 타입만 가질 수 있음.
Table Type - 인덱스 하나 당 하나의 타입을 가질 수 있음.
- 큰 의미가 없으며 v7.0에서는 타입은 완전히 사라짐.
- 인덱스가 데이터베이스와 테이블의 역할 두개를 동시에 하게 되었음.
Row Document - 문서는 Elasticsearch 데이터의 최소 단위.
- Json Object 의 1개 이다.
- 중첩 구조를 지원하여 문서 내부에 문서가 들어 갈 수 있음.
Column Field - 어떤 문서에 들어 가는 데이터의 타입을 정의.
- 하나의 필드가 여러 개의 데이터 타입을 가질 수도 있음.
Index Analyze  
Primary key _id  
Schema Mapping - 문서와 데이터를 가지고 있ㄴ느 필드가 어떻게 저장되고 색인 될지에 대한 프로세스.
- 필드와 필드의 속성을 정의하고 색인 방법을 정의합니다.
- 여러가지 데이터 타입 지정이 가능하지만 필드명 자체는 중복이 불가능.
Phygical partition Shard  
Logical partition Route  
Relational Parent/Child, Nested  
SQL Query DSL  

 

4. Cluster Architecture

cluster

5. 용어 정리

  • 클러스터 (cluseter)
    - Elasticsearch 에서 가장 큰 시스템 단위를 의미함.
    - 최소 하나 이상의 노드로 이루어진 노드들의 집합이다.
    - 서로 다은 클러스터는 데이터 접근, 교환을 허용하지 않는 독립적인 시스템을 유지
    - 여러 대의 서버가 하나의 클러스터를 구성할 수 있고, 한 서버에 여러 개의 클러스터를 구성할 수 있다.
  • 노드 (node)
    - Elasticsearch 를 구성하는 하나의 단위 프로세스를 의미함.
    - 역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분할 수 있다.

     1) Master-eligible node
        - 마스터를 제어하는 마스터로 선택할 수 있는 노드.
        - 인덱스 생성, 삭제
        - 클러스터 노드들의 추적, 관리
        - 데이터 입력시 어느 샤드에 할당할 것인지 구분
        - 네트워크 속도가 빠른 노드를 마스터 노드로 설정하는 것을 권장
        - 여러 개의 마스터 노드를 설정하면 하나만 마스터 노드로 작동
        - 설정하고 싶다면 elasticsearch.yml 내부에서 node.master: true 로 설정

     2) Data node
         - 데이터와 관련된 CRUD 작업과 관련있는 노드.
         - 데이터가 분산 저장되는 물리적 공간인 샤드가 배치되는 노드
         - CPU, Memory 등 자원을 많이 소모하므로 모니터링이 필요.
         - Master 노드와 분리되는 것이 좋음.
         - 설정하고 싶다면 elasticsearch.yml 내부에서 node.data: true 로 설정

     3) Ingest noe
         - 데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역할을 함. 
         - 스크립트로 전처리 파이프라인 구성, 실행하여 데이터 포맷 변경 가능.
         - 설정하고 싶다면 elasticsearch.yml 내부에서 node.ingest: true 로 설정

     4) Coordination only node
         - data node 와 master-eligible node 의 일을 대신하는 해줌.
         - 대규모 클러스터에 큰 이점이 있음.
         - 로드밸런서와 비슷한 역할.
         - 사용자의 요청만 받음.
         - 설정하고 싶다면 elasticsearch.yml 내부에서 노드 종류 관련 옵션 전부 false 로 설정

  • 샤드 (Shard)
    - 샤딩은 데이터를 분산해서 저장하는 방법을 의미
    - 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 하기도 함.
    - Primary Shard 는 데이터 원본의 공간
    - Replica Shard 는 장애극복(fail-over)을 위한 복제의 공간
  • 복제 (Replica)
    - 복제는 또 다른 형태의 shard 라고 할 수 있음.
    - 복제는 서로 다른 노드에 존재할 것을 권장.

간단 용어 정리

이름 내용
클러스터 ( Cluster ) Elasticsearch 서버 그 자체, 노드의 모음.
노드 ( Node ) 클러스터의 구성요소. 다양한 형태 존재 (master, data, ingest, coordination)
인덱스 ( Index ) 관계형 데이터베이스의 데이터베이스 이면서 테이블 (타입)
샤드 ( Shard ) 쪼개진 인덱스
문서 ( Document ) Elasticsearch 데이터의 최소 단위
필드 ( Field ) 문서를 구성하기 위한 속성
매핑 ( Mapping ) 필드와 필드속성, 색인 방법 정의 하는 프로세스

인덱스와 샤드
https://esbook.kimjmin.net/03-cluster/3.2-index-and-shards

5. Elasticsearch 특징

  • Scale out
    - 샤드를 통해 규모가 수평적으로 늘어날 수 있음
  • 고가용성
    - Replica 를 통해 데이터의 안정성을 보장
  • Schema Free
    - Json 문서를 통해 데이터 검색을 수행하므로 스키마 개념이 없음.
  • Restful API
Data CRUD ES Restful example
select get curl -XGET localhost:9200/parffa/blog/1?pretty
insert post curl -XPOST localhost:9200/paraffa/blog/1?pretty -d {"a": "a", "b": "b"} -H 'Content-Type: application/json'
update put curl -XPUT
delete delete curl -XDELET

-d : 추가할 데이터를 json 포맷으로 전달
-H : 헤더를 명시
?pretty : 결과를 예쁘게 보여주도록 요청
paraffa: 인덱스명 위치
blog: 타입명 위치

6. Elasticsearch 장점

  • 데이터베이스 대용으로 사용 가능
    - NoSQL 이며 분산 처리를 통해 거의 실시간에 가깝게 데이터 검색이 가능.
  • 대량의 비정형 데이터 보관 및 검색 가능
    - 비정형 데이터 검색이 가능하며 전문 검색(full text search)과 구조 검색을 모두 지원.
    - 기본적으로 MongoDB나 Hbase처럼 대용량 스토리지로 사용 가능.
  • 오픈소스 검색엔진
    - 아파치 루씬 기반 오픈소스 검색엔진으로 무료로 사용 가능.
    - 오픈 소스라 버그가 발생하면 빠르게 해결됨.
  • 통계 분석
    - 비정형 로그 데이터를 수집하고 한 곳에 모아서 통계 분석이 가능하다.
    - 키바나를 이용하면 시각화 또한 가능합니다.
  • 스키마리스 (Schemaless)
    - 관계형이 아닌 비정형의 다양한 형태의 문서도 자동으로 색인, 검색이 가능.
  • Restful API
    - 외부 API 통신으로 여러 다양한 플랫폼에서 응용 가능.
  • Multi-tenancy
    - 인덱스는 데이터베이스와 같은 개념
    - 서로 다른 인덱스에서도 검색할 필드명만 같으면 여러개의 인덱스에서 한번에 조회 가능
  • Document-Oriented
    - 여러 계층의 데이터를 Json 형식의 구조화된 문서로 인덱스에 저장이 가능.
    - 계층 구조로 문서도 한 번의 쿼리로 쉽게 조회 가능
  • 역색인 (Inverted-Index)
    - 가장 최근에 인덱싱된 데이터를 조회하므로 빠름.
  • 확장성과 가용성
    - 매우 많은 데이터가 존재할 때, 분산 시스템 구성으로 병렬적인 처리가 가능.
    - 분산 환경에서는 데이터가 샤드(Shard)라는 단위로 나누어 제공.
    - 인덱스 생성 시마다 샤드의 수 조정이 가능.
    - 데이터의 종류와 성격에 따라 데이터를 분산하여 빠르게 처리 가능.

7. Elasticsearch 단점

  • 실시간(Real Time) 처리는 불가능
    - 데이터 색인의 특징 때문, 색인된 데이터는 1초 뒤에나 검색이 가능.
    - 내부적으로 commit, flush 와 같은 과정을 거치기 때문.
    - 공식 홈페이지에서는 NRT (Near Real Time) 라고 표현.
  • 트랜잭션 (Transaction), 롤백 (Rollback) 등의 기능을 제공하지 않음
    - 분산 시스템의 구성의 특징 때문, 시스템적으로 비용 소모가 큰 롤백, 트랜잭션을 지원안함.
    - 데이터 관리에서 유의해야 함.
  • 전정한 의미릐 업데이트를 지원하지 않는다.
    - 업데이트 명령은 있지만 실제로는 데이터를 삭제했다가 다시 만드는 과정으로 업데이트 함.
    - 이러한 특성은 나중에 불변성 (Immutable) 이라는 이점을 제공

 

김종민 가이드 북 https://esbook.kimjmin.net/

'도움받기' 카테고리의 다른 글

ELK(ElasticSearch, Logstash, Kibana) Stack 이란?  (0) 2019.07.22
Netflix Hystrix  (0) 2019.07.22
Spring Event + Async + AOP 적용해보기  (0) 2019.07.22
Spring Boot Logging과 Profile 전략  (0) 2019.07.22
Spring Cache 장애 대응 방안  (0) 2019.07.22
댓글